Robert P. Day removed 8 gazillion occurrences of "extern" on function
[platform/upstream/busybox.git] / libbb / llist.c
1 /* vi: set sw=4 ts=4: */
2 /*
3  * linked list helper functions.
4  *
5  * Copyright (C) 2003 Glenn McGrath
6  * Copyright (C) 2005 Vladimir Oleynik
7  * Copyright (C) 2005 Bernhard Fischer
8  *
9  * Licensed under the GPL v2, see the file LICENSE in this tarball.
10  */
11 #include <stdlib.h>
12 #include "libbb.h"
13
14 #ifdef L_llist_add_to
15 /* Add data to the start of the linked list.  */
16 llist_t *llist_add_to(llist_t *old_head, char *new_item)
17 {
18         llist_t *new_head;
19
20         new_head = xmalloc(sizeof(llist_t));
21         new_head->data = new_item;
22         new_head->link = old_head;
23
24         return (new_head);
25 }
26 #endif
27
28 #ifdef L_llist_add_to_end
29 /* Add data to the end of the linked list.  */
30 llist_t *llist_add_to_end(llist_t *list_head, char *data)
31 {
32         llist_t *new_item;
33
34         new_item = xmalloc(sizeof(llist_t));
35         new_item->data = data;
36         new_item->link = NULL;
37
38         if (list_head == NULL) {
39                 list_head = new_item;
40         } else {
41                 llist_t *tail = list_head;
42                 while (tail->link)
43                         tail = tail->link;
44                 tail->link = new_item;
45         }
46         return list_head;
47 }
48 #endif
49
50 #ifdef L_llist_free_one
51 /* Free the current list element and advance to the next entry in the list.
52  * Returns a pointer to the next element.  */
53 llist_t *llist_free_one(llist_t *elm)
54 {
55         llist_t *next = elm ? elm->link : NULL;
56 #if ENABLE_DMALLOC /* avoid warnings from dmalloc's error-free-null option */
57         if (elm)
58 #endif
59                 free(elm);
60         elm = next;
61         return elm;
62 }
63 #endif
64
65 #ifdef L_llist_free
66 /* Recursively free all elements in the linked list.  */
67 void llist_free(llist_t *elm)
68 {
69         while ((elm = llist_free_one(elm)));
70 }
71 #endif