/* Taken from depthcharge: src/base/list.c */
/* SPDX-License-Identifier: GPL-2.0-or-later */

#include <commonlib/list.h>

void list_remove(struct list_node *node)
{
	if (node->prev)
		node->prev->next = node->next;
	if (node->next)
		node->next->prev = node->prev;
}

void list_insert_after(struct list_node *node, struct list_node *after)
{
	node->next = after->next;
	node->prev = after;
	after->next = node;
	if (node->next)
		node->next->prev = node;
}

void list_insert_before(struct list_node *node, struct list_node *before)
{
	node->prev = before->prev;
	node->next = before;
	before->prev = node;
	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);
}
