From: Daniel Stenberg Date: Tue, 10 Aug 2010 08:52:26 +0000 (+0200) Subject: Curl_llist_insert_next: allow insertion first in the list X-Git-Tag: curl-7_21_2~172 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=03da3ba1c0c26fa3d7113d469eac992cf972dc5a;p=thirdparty%2Fcurl.git Curl_llist_insert_next: allow insertion first in the list When we specify the "insert after" entry as NULL, this function now inserts the new entry first in the list. --- diff --git a/lib/llist.c b/lib/llist.c index 081b3ed89e..71238fa731 100644 --- a/lib/llist.c +++ b/lib/llist.c @@ -55,7 +55,13 @@ Curl_llist_alloc(curl_llist_dtor dtor) } /* - * Curl_llist_insert_next() returns 1 on success and 0 on failure. + * Curl_llist_insert_next() + * + * Inserts a new list element after the given one 'e'. If the given existing + * entry is NULL and the list already has elements, the new one will be + * inserted first in the list. + * + * Returns: 1 on success and 0 on failure. */ int Curl_llist_insert_next(struct curl_llist *list, struct curl_llist_element *e, @@ -73,15 +79,21 @@ Curl_llist_insert_next(struct curl_llist *list, struct curl_llist_element *e, list->tail = ne; } else { - ne->next = e->next; + /* if 'e' is NULL here, we insert the new element first in the list */ + ne->next = e?e->next:list->head; ne->prev = e; - if(e->next) { + if(!e) { + list->head->prev = ne; + list->head = ne; + } + else if(e->next) { e->next->prev = ne; } else { list->tail = ne; } - e->next = ne; + if(e) + e->next = ne; } ++list->size;