summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pkg.c14
1 files 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