/* vi: set sw=4 ts=4: */
/*
 * linked list helper functions.
 *
 * Copyright (C) 2003 Glenn McGrath
 * Copyright (C) 2005 Vladimir Oleynik
 * Copyright (C) 2005 Bernhard Fischer
 *
 * Licensed under the GPL v2, see the file LICENSE in this tarball.
 */
#include <stdlib.h>
#include "libbb.h"

#ifdef L_llist_add_to
/* Add data to the start of the linked list.  */
llist_t *llist_add_to(llist_t *old_head, char *new_item)
{
	llist_t *new_head;

	new_head = xmalloc(sizeof(llist_t));
	new_head->data = new_item;
	new_head->link = old_head;

	return (new_head);
}
#endif

#ifdef L_llist_add_to_end
/* Add data to the end of the linked list.  */
llist_t *llist_add_to_end(llist_t *list_head, char *data)
{
	llist_t *new_item;

	new_item = xmalloc(sizeof(llist_t));
	new_item->data = data;
	new_item->link = NULL;

	if (list_head == NULL) {
		list_head = new_item;
	} else {
		llist_t *tail = list_head;
		while (tail->link)
			tail = tail->link;
		tail->link = new_item;
	}
	return list_head;
}
#endif

#ifdef L_llist_free_one
/* Free the current list element and advance to the next entry in the list.
 * Returns a pointer to the next element.  */
llist_t *llist_free_one(llist_t *elm)
{
	llist_t *next = elm ? elm->link : NULL;
#if ENABLE_DMALLOC /* avoid warnings from dmalloc's error-free-null option */
	if (elm)
#endif
		free(elm);
	elm = next;
	return elm;
}
#endif

#ifdef L_llist_free
/* Recursively free all elements in the linked list.  */
void llist_free(llist_t *elm)
{
	while ((elm = llist_free_one(elm)));
}
#endif
