diff --git a/src/glib.h b/src/glib.h index 4b2c6d6..d327a5f 100644 --- a/src/glib.h +++ b/src/glib.h @@ -389,6 +389,8 @@ GList *g_list_prepend (GList *list, gpointer data); void g_list_free (GList *list); void g_list_free_1 (GList *list); +void g_list_free_full (GList *list, + GDestroyNotify free_func); GList *g_list_copy (GList *list); guint g_list_length (GList *list); gint g_list_index (GList *list, diff --git a/src/glist.c b/src/glist.c index 882fda4..5d8123d 100644 --- a/src/glist.c +++ b/src/glist.c @@ -81,6 +81,17 @@ g_list_free (GList *list) } } +void +g_list_free_full (GList *list, GDestroyNotify free_func) +{ + while (list) { + GList *next = list->next; + (*free_func) (list->data); + g_list_free_1 (list); + list = next; + } +} + GList* g_list_append (GList *list, gpointer data) {