1 /* vi: set sw=4 ts=4: */
3 * linked list helper functions.
5 * Copyright (C) 2003 Glenn McGrath
6 * Copyright (C) 2005 Vladimir Oleynik
7 * Copyright (C) 2005 Bernhard Reutner-Fischer
8 * Copyright (C) 2006 Rob Landley <rob@landley.net>
10 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
15 /* Add data to the start of the linked list. */
16 void FAST_FUNC
llist_add_to(llist_t
**old_head
, void *data
)
18 llist_t
*new_head
= xmalloc(sizeof(llist_t
));
20 new_head
->data
= data
;
21 new_head
->link
= *old_head
;
25 /* Add data to the end of the linked list. */
26 void FAST_FUNC
llist_add_to_end(llist_t
**list_head
, void *data
)
29 list_head
= &(*list_head
)->link
;
30 *list_head
= xzalloc(sizeof(llist_t
));
31 (*list_head
)->data
= data
;
32 /*(*list_head)->link = NULL;*/
35 /* Remove first element from the list and return it */
36 void* FAST_FUNC
llist_pop(llist_t
**head
)
39 llist_t
*temp
= *head
;
49 /* Unlink arbitrary given element from the list */
50 void FAST_FUNC
llist_unlink(llist_t
**head
, llist_t
*elm
)
56 *head
= (*head
)->link
;
59 head
= &(*head
)->link
;
63 /* Recursively free all elements in the linked list. If freeit != NULL
64 * call it on each datum in the list */
65 void FAST_FUNC
llist_free(llist_t
*elm
, void (*freeit
) (void *data
))
68 void *data
= llist_pop(&elm
);
75 /* Reverse list order. */
76 llist_t
* FAST_FUNC
llist_rev(llist_t
*list
)
81 llist_t
*next
= list
->link
;
90 llist_t
* FAST_FUNC
llist_find_str(llist_t
*list
, const char *str
)
93 if (strcmp(list
->data
, str
) == 0)