From 21eebbb003f670dd1c762d5536c064d617682763 Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Sun, 31 Jul 2022 11:03:25 +0530 Subject: [PATCH] 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' --- nnn.1 | 2 +- src/nnn.c | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/nnn.1 b/nnn.1 index 1e998241..8fb8471e 100644 --- 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 index b10143a4..d7ad6a39 100644 --- 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;