summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/include/list.h2
-rw-r--r--src/lib/list.c8
2 files changed, 10 insertions, 0 deletions
diff --git a/src/include/list.h b/src/include/list.h
index 6f0b54d818..bfd92a747b 100644
--- a/src/include/list.h
+++ b/src/include/list.h
@@ -15,6 +15,8 @@ void list_remove(struct list_node *node);
void list_insert_after(struct list_node *node, struct list_node *after);
// Insert list_node node before list_node before in a doubly linked list.
void list_insert_before(struct list_node *node, struct list_node *before);
+// Appends the node to the end of the list.
+void list_append(struct list_node *node, struct list_node *head);
#define list_for_each(ptr, head, member) \
for ((ptr) = container_of((head).next, typeof(*(ptr)), member); \
diff --git a/src/lib/list.c b/src/lib/list.c
index 01d5c8914e..c3f8ee42c8 100644
--- a/src/lib/list.c
+++ b/src/lib/list.c
@@ -28,3 +28,11 @@ void list_insert_before(struct list_node *node, struct list_node *before)
if (node->prev)
node->prev->next = node;
}
+
+void list_append(struct list_node *node, struct list_node *head)
+{
+ while (head->next)
+ head = head->next;
+
+ list_insert_after(node, head);
+}