OSDN Git Service

Add free functions for predefined llist types.
authorRob Landley <rob@landley.net>
Wed, 21 May 2014 11:57:43 +0000 (06:57 -0500)
committerRob Landley <rob@landley.net>
Wed, 21 May 2014 11:57:43 +0000 (06:57 -0500)
lib/lib.h
lib/llist.c

index 715e78d..f8fcd8f 100644 (file)
--- a/lib/lib.h
+++ b/lib/lib.h
@@ -24,7 +24,9 @@ struct double_list {
   char *data;
 };
 
-void llist_traverse(void *list, void (*using)(void *data));
+void llist_free_arg(void *node);
+void llist_free_double(void *node);
+void llist_traverse(void *list, void (*using)(void *node));
 void *llist_pop(void *list);  // actually void **list
 void *dlist_pop(void *list);  // actually struct double_list **list
 void dlist_add_nomalloc(struct double_list **list, struct double_list *new);
index 71a187d..2d5bc97 100644 (file)
@@ -5,8 +5,26 @@
 
 #include "toys.h"
 
+// Callback function to free data pointer of double_list or arg_list
+
+void llist_free_arg(void *node)
+{
+  struct arg_list *d = node;
+
+  free(d->arg);
+  free(d);
+}
+
+void llist_free_double(void *node)
+{
+  struct double_list *d = node;
+
+  free(d->data);
+  free(d);
+}
+
 // Call a function (such as free()) on each element of a linked list.
-void llist_traverse(void *list, void (*using)(void *data))
+void llist_traverse(void *list, void (*using)(void *node))
 {
   void *old = list;