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;
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;
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); \