mirror of
https://github.com/jarun/nnn.git
synced 2024-11-28 05:41:31 +00:00
xrealloc() may move memory
This commit is contained in:
parent
06f6435ebd
commit
6faab79ba9
13
src/nnn.c
13
src/nnn.c
|
@ -6134,6 +6134,7 @@ static char *load_input()
|
||||||
ssize_t i, chunk_count = 1, chunk = 512 * 1024, entries = 0;
|
ssize_t i, chunk_count = 1, chunk = 512 * 1024, entries = 0;
|
||||||
char *input = malloc(sizeof(char) * chunk), *tmpdir = NULL;
|
char *input = malloc(sizeof(char) * chunk), *tmpdir = NULL;
|
||||||
char cwd[PATH_MAX], *next, *tmp;
|
char cwd[PATH_MAX], *next, *tmp;
|
||||||
|
size_t offsets[1 << 16];
|
||||||
char *paths[1 << 16];
|
char *paths[1 << 16];
|
||||||
ssize_t input_read, total_read = 0, off = 0;
|
ssize_t input_read, total_read = 0, off = 0;
|
||||||
|
|
||||||
|
@ -6170,22 +6171,25 @@ static char *load_input()
|
||||||
if (entries == (1 << 16))
|
if (entries == (1 << 16))
|
||||||
goto malloc_1;
|
goto malloc_1;
|
||||||
|
|
||||||
paths[entries++] = input + off;
|
offsets[entries++] = off;
|
||||||
off = next - input;
|
off = next - input;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (input_read < chunk)
|
if (input_read < chunk)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (chunk_count == 512 || !(input = xrealloc(input, (chunk_count + 1) * chunk)))
|
if (chunk_count == 512)
|
||||||
goto malloc_1;
|
goto malloc_1;
|
||||||
|
|
||||||
|
if (!(input = xrealloc(input, (chunk_count + 1) * chunk)))
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (off != total_read) {
|
if (off != total_read) {
|
||||||
if (entries == (1 << 16))
|
if (entries == (1 << 16))
|
||||||
goto malloc_1;
|
goto malloc_1;
|
||||||
|
|
||||||
paths[entries++] = input + off;
|
offsets[entries++] = off;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!entries)
|
if (!entries)
|
||||||
|
@ -6193,6 +6197,9 @@ static char *load_input()
|
||||||
|
|
||||||
input[total_read] = '\0';
|
input[total_read] = '\0';
|
||||||
|
|
||||||
|
for (i = 0; i < entries; ++i)
|
||||||
|
paths[i] = input + offsets[i];
|
||||||
|
|
||||||
g_prefixpath = malloc(sizeof(char) * PATH_MAX);
|
g_prefixpath = malloc(sizeof(char) * PATH_MAX);
|
||||||
if (!g_prefixpath)
|
if (!g_prefixpath)
|
||||||
goto malloc_1;
|
goto malloc_1;
|
||||||
|
|
Loading…
Reference in a new issue