]> git.ipfire.org Git - thirdparty/kmod.git/commitdiff
kmod_list: add helper kmod_list_insert_after()
authorLucas De Marchi <lucas.demarchi@profusion.mobi>
Tue, 6 Dec 2011 01:41:14 +0000 (23:41 -0200)
committerLucas De Marchi <lucas.demarchi@profusion.mobi>
Tue, 6 Dec 2011 05:34:51 +0000 (03:34 -0200)
libkmod/libkmod-list.c
libkmod/libkmod-private.h

index 333a54c469786bfa63be6c8503de1a7125a0459c..ea73cbb7f2e3626ab728c67ea2c1810a341ea522 100644 (file)
@@ -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;
index 5740fe2abf44647adab2461ced0525c190ce848d..02971614cfc6c1f1b623162752030cef11576c79 100644 (file)
@@ -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); \