From: Lucas De Marchi Date: Tue, 6 Dec 2011 01:41:14 +0000 (-0200) Subject: kmod_list: add helper kmod_list_insert_after() X-Git-Tag: v1~88 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=86e878857219d3b0ffc716ec3135258a9d5523f2;p=thirdparty%2Fkmod.git kmod_list: add helper kmod_list_insert_after() --- diff --git a/libkmod/libkmod-list.c b/libkmod/libkmod-list.c index 333a54c4..ea73cbb7 100644 --- a/libkmod/libkmod-list.c +++ b/libkmod/libkmod-list.c @@ -71,6 +71,20 @@ static inline struct list_node *list_node_remove(struct list_node *node) return node->prev; } +static inline void list_node_insert_after(struct list_node *list, + struct list_node *node) +{ + if (list == NULL) { + list_node_init(node); + return; + } + + node->prev = list; + node->next = list->next; + list->next->prev = node; + list->next = node; +} + struct kmod_list *kmod_list_append(struct kmod_list *list, const void *data) { struct kmod_list *new; @@ -85,6 +99,23 @@ struct kmod_list *kmod_list_append(struct kmod_list *list, const void *data) return list ? list : new; } +struct kmod_list *kmod_list_insert_after(struct kmod_list *list, const void *data) +{ + struct kmod_list *new; + + if (list == NULL) + return kmod_list_append(list, data); + + new = malloc(sizeof(*new)); + if (new == NULL) + return NULL; + + new->data = (void *)data; + list_node_insert_after(&list->node, &new->node); + + return list; +} + 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 5740fe2a..02971614 100644 --- a/libkmod/libkmod-private.h +++ b/libkmod/libkmod-private.h @@ -53,6 +53,8 @@ struct kmod_list *kmod_list_remove_data(struct kmod_list *list, const void *data) __must_check __attribute__((nonnull(2))); 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))); + #undef kmod_list_foreach #define kmod_list_foreach(list_entry, first_entry) \ for (list_entry = ((first_entry) == NULL) ? NULL : (first_entry); \