From 0d047a120ff50d000dce22d7cc8b141a24ce8de9 Mon Sep 17 00:00:00 2001 Message-Id: <0d047a120ff50d000dce22d7cc8b141a24ce8de9.1714861984.git.mdw@distorted.org.uk> From: Mark Wooding Date: Wed, 25 Nov 2009 13:13:44 +0000 Subject: [PATCH] More memory hygeine. Organization: Straylight/Edgeware From: Richard Kettlewell --- clients/disorder.c | 7 ++++--- lib/client.c | 2 ++ lib/kvp.c | 9 +++++++++ lib/kvp.h | 2 ++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/clients/disorder.c b/clients/disorder.c index c622372..5f5ee4d 100644 --- a/clients/disorder.c +++ b/clients/disorder.c @@ -278,12 +278,13 @@ static void cf_unset(char **argv) { } static void cf_prefs(char **argv) { - struct kvp *k; + struct kvp *k, *base; - if(disorder_prefs(getclient(), argv[0], &k)) exit(EXIT_FAILURE); - for(; k; k = k->next) + if(disorder_prefs(getclient(), argv[0], &base)) exit(EXIT_FAILURE); + for(k = base; k; k = k->next) xprintf("%s = %s\n", nullcheck(utf82mb(k->name)), nullcheck(utf82mb(k->value))); + kvp_free(base); } static void cf_search(char **argv) { diff --git a/lib/client.c b/lib/client.c index d7a3564..50f7184 100644 --- a/lib/client.c +++ b/lib/client.c @@ -869,7 +869,9 @@ int disorder_prefs(disorder_client *c, const char *track, struct kvp **kp) { k->name = pvec[0]; k->value = pvec[1]; kp = &k->next; + xfree(pvec); } + free_strings(nvec, vec); *kp = 0; return 0; } diff --git a/lib/kvp.c b/lib/kvp.c index 45aa03c..f17cdc1 100644 --- a/lib/kvp.c +++ b/lib/kvp.c @@ -287,6 +287,15 @@ struct kvp *kvp_make(const char *name, ...) { return kvp; } +void kvp_free(struct kvp *k) { + if(k) { + kvp_free(k->next); + xfree((void *)k->name); + xfree((void *)k->value); + xfree(k); + } +} + /* Local Variables: c-basic-offset:2 diff --git a/lib/kvp.h b/lib/kvp.h index 0a7e478..732a8a6 100644 --- a/lib/kvp.h +++ b/lib/kvp.h @@ -71,6 +71,8 @@ char *urlencodestring(const char *s); char *urldecodestring(const char *s, size_t ns); struct kvp *kvp_make(const char *key, ...); +void kvp_free(struct kvp *k); + #endif /* KVP_H */ /* -- [mdw]