X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=libbb%2Fllist.c;h=51b1ce6c99c979dc9741818fffd64ab341f4598d;hb=d7171c114028815df4e92f9c26875f1d60c6af2a;hp=2bef4315129419d20582b5c8e796c425aa502e2a;hpb=ba1315d0fbe7fa43aa7481b5d6e92bd03b0152d5;p=oweals%2Fbusybox.git diff --git a/libbb/llist.c b/libbb/llist.c index 2bef43151..51b1ce6c9 100644 --- a/libbb/llist.c +++ b/libbb/llist.c @@ -4,7 +4,7 @@ * * Copyright (C) 2003 Glenn McGrath * Copyright (C) 2005 Vladimir Oleynik - * Copyright (C) 2005 Bernhard Fischer + * Copyright (C) 2005 Bernhard Reutner-Fischer * Copyright (C) 2006 Rob Landley * * Licensed under the GPL v2 or later, see the file LICENSE in this tarball. @@ -25,56 +25,38 @@ void FAST_FUNC llist_add_to(llist_t **old_head, void *data) /* Add data to the end of the linked list. */ void FAST_FUNC llist_add_to_end(llist_t **list_head, void *data) { - llist_t *new_item = xmalloc(sizeof(llist_t)); - - new_item->data = data; - new_item->link = NULL; - - if (!*list_head) - *list_head = new_item; - else { - llist_t *tail = *list_head; - - while (tail->link) - tail = tail->link; - tail->link = new_item; - } + while (*list_head) + list_head = &(*list_head)->link; + *list_head = xzalloc(sizeof(llist_t)); + (*list_head)->data = data; + /*(*list_head)->link = NULL;*/ } /* Remove first element from the list and return it */ void* FAST_FUNC llist_pop(llist_t **head) { - void *data, *next; - - if (!*head) - return NULL; - - data = (*head)->data; - next = (*head)->link; - free(*head); - *head = next; + void *data = NULL; + llist_t *temp = *head; + if (temp) { + data = temp->data; + *head = temp->link; + free(temp); + } return data; } /* Unlink arbitrary given element from the list */ void FAST_FUNC llist_unlink(llist_t **head, llist_t *elm) { - llist_t *crt; - - if (!(elm && *head)) + if (!elm) return; - - if (elm == *head) { - *head = (*head)->link; - return; - } - - for (crt = *head; crt; crt = crt->link) { - if (crt->link == elm) { - crt->link = elm->link; - return; + while (*head) { + if (*head == elm) { + *head = (*head)->link; + break; } + head = &(*head)->link; } } @@ -104,3 +86,13 @@ llist_t* FAST_FUNC llist_rev(llist_t *list) } return rev; } + +llist_t* FAST_FUNC llist_find_str(llist_t *list, const char *str) +{ + while (list) { + if (strcmp(list->data, str) == 0) + break; + list = list->link; + } + return list; +}