X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=file.c;h=494c6491cb80b68c2967cf2fc462b1004f188283;hb=c4df32b386c7bb29568140d135d7315e76c934b7;hp=7e1e4e6f0ddcdbb545c4e83efda52fb33031374a;hpb=ec96e1f93d6d0faa3f3c40f6bcbc0006550281a8;p=project%2Fuci.git diff --git a/file.c b/file.c index 7e1e4e6..494c649 100644 --- a/file.c +++ b/file.c @@ -70,8 +70,6 @@ __private void uci_getln(struct uci_context *ctx, int offset) pctx->bufsz *= 2; pctx->buf = uci_realloc(ctx, pctx->buf, pctx->bufsz); - if (!pctx->buf) - UCI_THROW(ctx, UCI_ERR_MEM); } while (1); } @@ -835,7 +833,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 +845,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 +871,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; }