summaryrefslogtreecommitdiff
path: root/lib/linklist.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/linklist.c')
-rw-r--r--lib/linklist.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/lib/linklist.c b/lib/linklist.c
index c1b056d739..2f9e7c1e33 100644
--- a/lib/linklist.c
+++ b/lib/linklist.c
@@ -239,7 +239,7 @@ void list_delete_all_node(struct list *list)
assert(list);
for (node = list->head; node; node = next) {
next = node->next;
- if (list->del)
+ if (*list->del)
(*list->del)(node->data);
listnode_free(node);
}
@@ -248,11 +248,17 @@ void list_delete_all_node(struct list *list)
}
/* Delete all listnode then free list itself. */
-void list_delete(struct list *list)
+void list_delete_and_null(struct list **list)
{
- assert(list);
- list_delete_all_node(list);
- list_free(list);
+ assert(*list);
+ list_delete_all_node(*list);
+ list_free(*list);
+ *list = NULL;
+}
+
+void list_delete_original(struct list *list)
+{
+ list_delete_and_null(&list);
}
/* Lookup the node which has given data. */