From 840cf3c97e793877388396a43dd2048f361eac67 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Thu, 29 Nov 2012 05:54:29 -0800 Subject: [PATCH] Use standard GSList functions to merge package lists Using the GSList functions instead of manually adjusting the list pointers seems safer and allows an easier path to using another glib list type if necessary. --- pkg.c | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/pkg.c b/pkg.c index a7359ab..2f8bfe6 100644 --- a/pkg.c +++ b/pkg.c @@ -655,28 +655,20 @@ merge_flag_lists (GSList *packages, GetListFunc func, GSList **listp) GSList *last = NULL; GSList *flags; + /* keep track of the last element to avoid traversing the whole list */ for (pkg = packages; pkg != NULL; pkg = pkg->next) { - /* manually copy the elements so we can keep track of the end */ for (flags = (*func) (pkg->data); flags != NULL; flags = flags->next) { if (last == NULL) { - *listp = g_slist_alloc (); + *listp = g_slist_prepend (NULL, flags->data); last = *listp; } else - { - last->next = g_slist_alloc (); - last = last->next; - } - last->data = flags->data; + last = g_slist_next (g_slist_append (last, flags->data)); } } - - /* terminate the last element */ - if (last != NULL) - last->next = NULL; } static void