xref: /aosp_15_r20/external/coreboot/src/commonlib/list.c (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1 /* Taken from depthcharge: src/base/list.c */
2 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 
4 #include <commonlib/list.h>
5 
list_remove(struct list_node * node)6 void list_remove(struct list_node *node)
7 {
8 	if (node->prev)
9 		node->prev->next = node->next;
10 	if (node->next)
11 		node->next->prev = node->prev;
12 }
13 
list_insert_after(struct list_node * node,struct list_node * after)14 void list_insert_after(struct list_node *node, struct list_node *after)
15 {
16 	node->next = after->next;
17 	node->prev = after;
18 	after->next = node;
19 	if (node->next)
20 		node->next->prev = node;
21 }
22 
list_insert_before(struct list_node * node,struct list_node * before)23 void list_insert_before(struct list_node *node, struct list_node *before)
24 {
25 	node->prev = before->prev;
26 	node->next = before;
27 	before->prev = node;
28 	if (node->prev)
29 		node->prev->next = node;
30 }
31 
list_append(struct list_node * node,struct list_node * head)32 void list_append(struct list_node *node, struct list_node *head)
33 {
34 	while (head->next)
35 		head = head->next;
36 
37 	list_insert_after(node, head);
38 }
39