From: Michal 'vorner' Vaner Date: Tue, 22 Nov 2016 15:50:24 +0000 (+0100) Subject: Fix skipping directories in uci_list_config_files X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=49ec6efbdac4819033d34f08927d795f83a3932d;p=oweals%2Fuci.git Fix skipping directories in uci_list_config_files Don't create a hole in the array of configs if there's a directory. Such a hole would be mistaken for the end of the array. Signed-off-by: Michal 'vorner' Vaner --- diff --git a/file.c b/file.c index 7e1e4e6..5a8c6cb 100644 --- a/file.c +++ b/file.c @@ -835,7 +835,7 @@ static char **uci_list_config_files(struct uci_context *ctx) { char **configs; glob_t globbuf; - int size, i; + int size, i, j, skipped; char *buf; char *dir; @@ -847,18 +847,22 @@ static char **uci_list_config_files(struct uci_context *ctx) } size = sizeof(char *) * (globbuf.gl_pathc + 1); + skipped = 0; for(i = 0; i < globbuf.gl_pathc; i++) { char *p; p = get_filename(globbuf.gl_pathv[i]); - if (!p) + if (!p) { + skipped++; continue; + } size += strlen(p) + 1; } - configs = uci_malloc(ctx, size); - buf = (char *) &configs[globbuf.gl_pathc + 1]; + configs = uci_malloc(ctx, size - skipped); + buf = (char *) &configs[globbuf.gl_pathc + 1 - skipped]; + j = 0; for(i = 0; i < globbuf.gl_pathc; i++) { char *p; @@ -869,7 +873,7 @@ static char **uci_list_config_files(struct uci_context *ctx) if (!uci_validate_package(p)) continue; - configs[i] = buf; + configs[j++] = buf; strcpy(buf, p); buf += strlen(buf) + 1; }