From 1965029cb08ed31aca48921bd0418033cc0b060a Mon Sep 17 00:00:00 2001 From: Lucas De Marchi Date: Tue, 6 Dec 2011 00:47:06 -0200 Subject: [PATCH] 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. --- libkmod/libkmod-list.c | 31 +++++++++++++++++++++++++++++++ libkmod/libkmod-private.h | 1 + 2 files changed, 32 insertions(+) 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) \ -- 2.47.2