From: Felix Fietkau Date: Wed, 30 Jan 2008 02:18:56 +0000 (+0100) Subject: free uci_history entries properly X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fuci.git;a=commitdiff_plain;h=3a31f869e08a9f11f2e2e962257b98dc1e028cb7 free uci_history entries properly --- diff --git a/file.c b/file.c index 0a9b180..cb76d97 100644 --- a/file.c +++ b/file.c @@ -749,7 +749,7 @@ int uci_save(struct uci_context *ctx, struct uci_package *p) fprintf(f, "\n"); else fprintf(f, "=%s\n", h->value); - uci_list_del(&e->list); + uci_free_history(h); } done: diff --git a/list.c b/list.c index bd70857..88f07bd 100644 --- a/list.c +++ b/list.c @@ -173,7 +173,7 @@ uci_free_package(struct uci_package *p) } /* record a change that was done to a package */ -static inline void +static void uci_add_history(struct uci_context *ctx, struct uci_package *p, int cmd, char *section, char *option, char *value) { struct uci_history *h; @@ -197,6 +197,19 @@ uci_add_history(struct uci_context *ctx, struct uci_package *p, int cmd, char *s uci_list_add(&p->history, &h->e.list); } +static void +uci_free_history(struct uci_history *h) +{ + if (!h) + return; + if ((h->section != NULL) && + (h->section != uci_dataptr(h))) { + free(h->section); + free(h->value); + } + uci_free_element(&h->e); +} + static struct uci_element *uci_lookup_list(struct uci_context *ctx, struct uci_list *list, const char *name) { struct uci_element *e;