projects
/
project
/
uci.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix memory leak in uci_list_config_files
[project/uci.git]
/
file.c
diff --git
a/file.c
b/file.c
index 1abe8ff4987d6159affc60c7f847ccb7f84d365c..c6a30950cafc25a5c5f235974c91cb4df0b1f148 100644
(file)
--- a/
file.c
+++ b/
file.c
@@
-442,19
+442,16
@@
void uci_file_commit(struct uci_context *ctx, struct uci_package **package, bool
/* freed together with the uci_package */
path = NULL;
/* freed together with the uci_package */
path = NULL;
-
- /* check for updated history, flush */
- if (!uci_load_history(ctx, p, true))
- goto done;
- } else {
- /* flush history */
- if (!uci_load_history(ctx, NULL, true))
- goto done;
}
}
+
+ /* flush history */
+ if (!uci_load_history(ctx, p, true))
+ goto done;
}
rewind(f);
}
rewind(f);
- ftruncate(fileno(f), 0);
+ if (ftruncate(fileno(f), 0) < 0)
+ UCI_THROW(ctx, UCI_ERR_IO);
uci_export(ctx, f, p, false);
UCI_TRAP_RESTORE(ctx);
uci_export(ctx, f, p, false);
UCI_TRAP_RESTORE(ctx);
@@
-497,8
+494,10
@@
static char **uci_list_config_files(struct uci_context *ctx)
dir = uci_malloc(ctx, strlen(ctx->confdir) + 1 + sizeof("/*"));
sprintf(dir, "%s/*", ctx->confdir);
dir = uci_malloc(ctx, strlen(ctx->confdir) + 1 + sizeof("/*"));
sprintf(dir, "%s/*", ctx->confdir);
- if (glob(dir, GLOB_MARK, NULL, &globbuf) != 0)
+ if (glob(dir, GLOB_MARK, NULL, &globbuf) != 0) {
+ free(dir);
UCI_THROW(ctx, UCI_ERR_NOTFOUND);
UCI_THROW(ctx, UCI_ERR_NOTFOUND);
+ }
size = sizeof(char *) * (globbuf.gl_pathc + 1);
for(i = 0; i < globbuf.gl_pathc; i++) {
size = sizeof(char *) * (globbuf.gl_pathc + 1);
for(i = 0; i < globbuf.gl_pathc; i++) {