aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2020-02-02 19:10:35 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2020-02-02 19:10:35 +0530
commit1614ce172bdfeec652c8222eb0a08999a4fcb76b (patch)
treeade5990411553199d90c6013baf39d9fd92d709c
parent6faab79ba968b81a9ccaea9454a5224655a0dc2a (diff)
downloadnnn-1614ce172bdfeec652c8222eb0a08999a4fcb76b.tar.gz
Late allocate memory for path pointers
-rw-r--r--src/nnn.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/nnn.c b/src/nnn.c
index 1b9f7a2..f2b46e8 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -157,6 +157,7 @@
#define DOT_FILTER_LEN 7
#define ASCII_MAX 128
#define EXEC_ARGS_MAX 8
+#define LIST_FILES_MAX (1 << 16)
#define SCROLLOFF 3
#define MIN_DISPLAY_COLS 10
#define LONG_SIZE sizeof(ulong)
@@ -6134,8 +6135,8 @@ static char *load_input()
ssize_t i, chunk_count = 1, chunk = 512 * 1024, entries = 0;
char *input = malloc(sizeof(char) * chunk), *tmpdir = NULL;
char cwd[PATH_MAX], *next, *tmp;
- size_t offsets[1 << 16];
- char *paths[1 << 16];
+ size_t offsets[LIST_FILES_MAX];
+ char **paths = NULL;
ssize_t input_read, total_read = 0, off = 0;
if (!input) {
@@ -6168,7 +6169,7 @@ static char *load_input()
continue;
}
- if (entries == (1 << 16))
+ if (entries == LIST_FILES_MAX)
goto malloc_1;
offsets[entries++] = off;
@@ -6186,7 +6187,7 @@ static char *load_input()
}
if (off != total_read) {
- if (entries == (1 << 16))
+ if (entries == LIST_FILES_MAX)
goto malloc_1;
offsets[entries++] = off;
@@ -6197,6 +6198,10 @@ static char *load_input()
input[total_read] = '\0';
+ paths = malloc(entries * sizeof(char *));
+ if (!paths)
+ goto malloc_1;
+
for (i = 0; i < entries; ++i)
paths[i] = input + offsets[i];
@@ -6225,7 +6230,7 @@ static char *load_input()
if (entries == 1) {
tmp = xmemrchr((uchar *)g_prefixpath, '/', strlen(g_prefixpath));
if (!tmp)
- return NULL;
+ goto malloc_2;
*(tmp != g_prefixpath ? tmp : tmp + 1) = '\0';
}
@@ -6237,6 +6242,7 @@ malloc_2:
free(paths[i]);
malloc_1:
free(input);
+ free(paths);
return tmpdir;
}