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.
This commit is contained in:
Dan Nicholson 2012-11-29 05:54:29 -08:00
parent 160177d8d2
commit 840cf3c97e

14
pkg.c
View file

@ -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