From 3a31f869e08a9f11f2e2e962257b98dc1e028cb7 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Wed, 30 Jan 2008 03:18:56 +0100 Subject: [PATCH] free uci_history entries properly --- file.c | 2 +- list.c | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) 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; -- 2.25.1