chiark / gitweb /
More memory hygeine.
authorRichard Kettlewell <rjk@greenend.org.uk>
Wed, 25 Nov 2009 13:13:44 +0000 (13:13 +0000)
committerRichard Kettlewell <rjk@greenend.org.uk>
Wed, 25 Nov 2009 13:13:44 +0000 (13:13 +0000)
clients/disorder.c
lib/client.c
lib/kvp.c
lib/kvp.h

index c622372a1cd9910ead97a052f3fe9c4ff1804a43..5f5ee4dcea082c8f78e4aa574243251a956fd036 100644 (file)
@@ -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) {
index d7a3564d8132d12a41ed90a3742951b11b1ec6bd..50f718466922f83707fd90568b5d3855fd43ec4a 100644 (file)
@@ -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;
 }
index 45aa03c190f3533540b95f323d473e9e95b0b594..f17cdc1edb05c9ac77ed63b3332465409b07edd6 100644 (file)
--- 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
index 0a7e4780d0af3691c25ea3a10043406f78e26c0f..732a8a68623613be96154d3a0d3c95a57baaffeb 100644 (file)
--- 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 */
 
 /*