From: Lucas De Marchi Date: Tue, 6 Dec 2011 02:47:06 +0000 (-0200) Subject: kmod_list: add helper function to merge two lists X-Git-Tag: v1~86 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1965029cb08ed31aca48921bd0418033cc0b060a;p=thirdparty%2Fkmod.git kmod_list: add helper function to merge two lists This helper function will append the second list in the first one, so they become one single list. --- diff --git a/libkmod/libkmod-list.c b/libkmod/libkmod-list.c index 2b7fc54d..a2978538 100644 --- a/libkmod/libkmod-list.c +++ b/libkmod/libkmod-list.c @@ -99,6 +99,26 @@ static inline void list_node_insert_before(struct list_node *list, list->prev = node; } +static inline void list_node_append_list(struct list_node *list1, + struct list_node *list2) +{ + struct list_node *list1_last; + + if (list1 == NULL) { + list_node_init(list2); + return; + } + + list1->prev->next = list2; + list2->prev->next = list1; + + /* cache the last, because we will lose the pointer */ + list1_last = list1->prev; + + list1->prev = list2->prev; + list2->prev = list1_last; +} + struct kmod_list *kmod_list_append(struct kmod_list *list, const void *data) { struct kmod_list *new; @@ -147,6 +167,17 @@ struct kmod_list *kmod_list_insert_before(struct kmod_list *list, const void *da return new; } +struct kmod_list *kmod_list_append_list(struct kmod_list *list1, + struct kmod_list *list2) +{ + if (list1 == NULL) + return list2; + + list_node_append_list(&list1->node, &list2->node); + + return list1; +} + struct kmod_list *kmod_list_prepend(struct kmod_list *list, const void *data) { struct kmod_list *new; diff --git a/libkmod/libkmod-private.h b/libkmod/libkmod-private.h index 8e9e540f..5479cc95 100644 --- a/libkmod/libkmod-private.h +++ b/libkmod/libkmod-private.h @@ -55,6 +55,7 @@ struct kmod_list *kmod_list_remove_n_latest(struct kmod_list *list, unsigned int n) __must_check; struct kmod_list *kmod_list_insert_after(struct kmod_list *list, const void *data) __attribute__((nonnull(2))); struct kmod_list *kmod_list_insert_before(struct kmod_list *list, const void *data) __attribute__((nonnull(2))); +struct kmod_list *kmod_list_append_list(struct kmod_list *list1, struct kmod_list *list2) __must_check; #undef kmod_list_foreach #define kmod_list_foreach(list_entry, first_entry) \