From 86e878857219d3b0ffc716ec3135258a9d5523f2 Mon Sep 17 00:00:00 2001 From: Lucas De Marchi Date: Mon, 5 Dec 2011 23:41:14 -0200 Subject: [PATCH] kmod_list: add helper kmod_list_insert_after() --- libkmod/libkmod-list.c | 31 +++++++++++++++++++++++++++++++ libkmod/libkmod-private.h | 2 ++ 2 files changed, 33 insertions(+) diff --git a/libkmod/libkmod-list.c b/libkmod/libkmod-list.c index 333a54c..ea73cbb 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 5740fe2..0297161 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); \ -- 2.7.4