diff --git a/src/glib.h b/src/glib.h index 4b2c6d6..4905fc8 100644 --- a/src/glib.h +++ b/src/glib.h @@ -332,6 +332,8 @@ GSList *g_slist_prepend (GSList *list, gpointer data); void g_slist_free (GSList *list); void g_slist_free_1 (GSList *list); +void g_slist_free_full (GSList *list, + GDestroyNotify free_func); GSList *g_slist_copy (GSList *list); GSList *g_slist_concat (GSList *list1, GSList *list2); diff --git a/src/gslist.c b/src/gslist.c index 5baa297..de3e203 100644 --- a/src/gslist.c +++ b/src/gslist.c @@ -124,6 +124,17 @@ g_slist_free (GSList *list) } } +void +g_slist_free_full (GSList *list, GDestroyNotify free_func) +{ + while (list) { + GSList *next = list->next; + (*free_func) (list->data); + g_slist_free_1 (list); + list = next; + } +} + GSList* g_slist_copy (GSList *list) {