From: Lucas De Marchi Date: Tue, 6 Dec 2011 01:53:56 +0000 (-0200) Subject: kmod_list: add helper kmod_list_insert_before() X-Git-Tag: v1~87 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b91a1c6d3d4780d59a63bafd89c42c1910022b54;p=thirdparty%2Fkmod.git kmod_list: add helper kmod_list_insert_before() --- diff --git a/libkmod/libkmod-list.c b/libkmod/libkmod-list.c index ea73cbb7..2b7fc54d 100644 --- a/libkmod/libkmod-list.c +++ b/libkmod/libkmod-list.c @@ -85,6 +85,20 @@ static inline void list_node_insert_after(struct list_node *list, list->next = node; } +static inline void list_node_insert_before(struct list_node *list, + struct list_node *node) +{ + if (list == NULL) { + list_node_init(node); + return; + } + + node->next = list; + node->prev = list->prev; + list->prev->next = node; + list->prev = node; +} + struct kmod_list *kmod_list_append(struct kmod_list *list, const void *data) { struct kmod_list *new; @@ -116,6 +130,23 @@ struct kmod_list *kmod_list_insert_after(struct kmod_list *list, const void *dat return list; } +struct kmod_list *kmod_list_insert_before(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_before(&list->node, &new->node); + + return new; +} + 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 02971614..8e9e540f 100644 --- a/libkmod/libkmod-private.h +++ b/libkmod/libkmod-private.h @@ -54,6 +54,7 @@ struct kmod_list *kmod_list_remove_data(struct kmod_list *list, 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))); #undef kmod_list_foreach #define kmod_list_foreach(list_entry, first_entry) \