commit 21eebbb003f670dd1c762d5536c064d617682763
parent f530b2ca18f779b1109c413bac2edd29dba434ae
Author: Arun Prakash Jana <engineerarun@gmail.com>
Date: Sun, 31 Jul 2022 11:03:25 +0530
File list mode changes
- support listing maximum 16K files
- check if target directory exists before directory tree creation
in most of the cases many files will be under the same directory
- make frequently used function 'inline'
Diffstat:
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/nnn.1 b/nnn.1
@@ -312,7 +312,7 @@ There are two ways to search and list:
.Pp
File paths must be NUL-separated ('\\0'). Paths and can be relative to the
current directory or absolute. Invalid paths in the input are ignored. Input
-limit is 65,536 paths or 256 MiB of data.
+limit is 16,384 paths or 256 MiB of data.
.Pp
To list the input stream, start
.Nm
diff --git a/src/nnn.c b/src/nnn.c
@@ -189,7 +189,7 @@
#define DOT_FILTER_LEN 7
#define ASCII_MAX 128
#define EXEC_ARGS_MAX 10
-#define LIST_FILES_MAX (1 << 16)
+#define LIST_FILES_MAX (1 << 14) /* Support listing 16K files */
#define SCROLLOFF 3
#define COLOR_256 256
@@ -5543,7 +5543,7 @@ static bool prep_threads(void)
}
/* Skip self and parent */
-static bool selforparent(const char *path)
+static inline bool selforparent(const char *path)
{
return path[0] == '.' && (path[1] == '\0' || (path[1] == '.' && path[2] == '\0'));
}
@@ -7900,7 +7900,8 @@ static char *make_tmp_tree(char **paths, ssize_t entries, const char *prefix)
if (slash)
*slash = '\0';
- xmktree(tmpdir, TRUE);
+ if (access(tmpdir, F_OK)) /* Create directory if it doesn't exist */
+ xmktree(tmpdir, TRUE);
if (slash)
*slash = '/';
@@ -8194,7 +8195,8 @@ static bool setup_config(void)
/* Create bookmarks, sessions, mounts and plugins directories */
for (r = 0; r < ELEMENTS(toks); ++r) {
mkpath(cfgpath, toks[r], plgpath);
- if (!xmktree(plgpath, TRUE)) {
+ /* The dirs are created on first run, check if they already exist */
+ if (access(plgpath, F_OK) && !xmktree(plgpath, TRUE)) {
DPRINTF_S(toks[r]);
xerror();
return FALSE;