diff options
author | Maxim Yurchuk <maxim-yurchuk@ydb.tech> | 2024-10-18 20:31:38 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-18 20:31:38 +0300 |
commit | 2a74bac2d2d3bccb4e10120f1ead805640ec9dd0 (patch) | |
tree | 047e4818ced5aaf73f58517629e5260b5291f9f0 /contrib/libs/curl/lib/llist.c | |
parent | 2d9656823e9521d8c29ea4c9a1d0eab78391abfc (diff) | |
parent | 3d834a1923bbf9403cd4a448e7f32b670aa4124f (diff) | |
download | ydb-2a74bac2d2d3bccb4e10120f1ead805640ec9dd0.tar.gz |
Merge pull request #10502 from ydb-platform/mergelibs-241016-1210
Library import 241016-1210
Diffstat (limited to 'contrib/libs/curl/lib/llist.c')
-rw-r--r-- | contrib/libs/curl/lib/llist.c | 212 |
1 files changed, 46 insertions, 166 deletions
diff --git a/contrib/libs/curl/lib/llist.c b/contrib/libs/curl/lib/llist.c index 7e19cd5095..5b6b0336da 100644 --- a/contrib/libs/curl/lib/llist.c +++ b/contrib/libs/curl/lib/llist.c @@ -32,34 +32,16 @@ /* this must be the last include file */ #include "memdebug.h" -#define LLISTINIT 0x100cc001 /* random pattern */ -#define NODEINIT 0x12344321 /* random pattern */ -#define NODEREM 0x54321012 /* random pattern */ - - -#ifdef DEBUGBUILD -#define VERIFYNODE(x) verifynode(x) -static struct Curl_llist_node *verifynode(struct Curl_llist_node *n) -{ - DEBUGASSERT(!n || (n->_init == NODEINIT)); - return n; -} -#else -#define VERIFYNODE(x) x -#endif /* * @unittest: 1300 */ void Curl_llist_init(struct Curl_llist *l, Curl_llist_dtor dtor) { - l->_size = 0; - l->_dtor = dtor; - l->_head = NULL; - l->_tail = NULL; -#ifdef DEBUGBUILD - l->_init = LLISTINIT; -#endif + l->size = 0; + l->dtor = dtor; + l->head = NULL; + l->tail = NULL; } /* @@ -74,193 +56,91 @@ Curl_llist_init(struct Curl_llist *l, Curl_llist_dtor dtor) * @unittest: 1300 */ void -Curl_llist_insert_next(struct Curl_llist *list, - struct Curl_llist_node *e, /* may be NULL */ +Curl_llist_insert_next(struct Curl_llist *list, struct Curl_llist_element *e, const void *p, - struct Curl_llist_node *ne) + struct Curl_llist_element *ne) { - DEBUGASSERT(list); - DEBUGASSERT(list->_init == LLISTINIT); - DEBUGASSERT(ne); - -#ifdef DEBUGBUILD - ne->_init = NODEINIT; -#endif - ne->_ptr = (void *) p; - ne->_list = list; - if(list->_size == 0) { - list->_head = ne; - list->_head->_prev = NULL; - list->_head->_next = NULL; - list->_tail = ne; + ne->ptr = (void *) p; + if(list->size == 0) { + list->head = ne; + list->head->prev = NULL; + list->head->next = NULL; + list->tail = ne; } else { /* if 'e' is NULL here, we insert the new element first in the list */ - ne->_next = e?e->_next:list->_head; - ne->_prev = e; + ne->next = e?e->next:list->head; + ne->prev = e; if(!e) { - list->_head->_prev = ne; - list->_head = ne; + list->head->prev = ne; + list->head = ne; } - else if(e->_next) { - e->_next->_prev = ne; + else if(e->next) { + e->next->prev = ne; } else { - list->_tail = ne; + list->tail = ne; } if(e) - e->_next = ne; + e->next = ne; } - ++list->_size; -} - -/* - * Curl_llist_append() - * - * Adds a new list element to the end of the list. - * - * The 'ne' argument should be a pointer into the object to store. - * - * @unittest: 1300 - */ -void -Curl_llist_append(struct Curl_llist *list, const void *p, - struct Curl_llist_node *ne) -{ - DEBUGASSERT(list); - DEBUGASSERT(list->_init == LLISTINIT); - DEBUGASSERT(ne); - Curl_llist_insert_next(list, list->_tail, p, ne); + ++list->size; } /* * @unittest: 1300 */ void -Curl_node_uremove(struct Curl_llist_node *e, void *user) +Curl_llist_remove(struct Curl_llist *list, struct Curl_llist_element *e, + void *user) { void *ptr; - struct Curl_llist *list; - if(!e) + if(!e || list->size == 0) return; - list = e->_list; - DEBUGASSERT(list); - DEBUGASSERT(list->_init == LLISTINIT); - DEBUGASSERT(list->_size); - DEBUGASSERT(e->_init == NODEINIT); - if(e == list->_head) { - list->_head = e->_next; + if(e == list->head) { + list->head = e->next; - if(!list->_head) - list->_tail = NULL; + if(!list->head) + list->tail = NULL; else - e->_next->_prev = NULL; + e->next->prev = NULL; } else { - if(e->_prev) - e->_prev->_next = e->_next; + if(e->prev) + e->prev->next = e->next; - if(!e->_next) - list->_tail = e->_prev; + if(!e->next) + list->tail = e->prev; else - e->_next->_prev = e->_prev; + e->next->prev = e->prev; } - ptr = e->_ptr; + ptr = e->ptr; - e->_list = NULL; - e->_ptr = NULL; - e->_prev = NULL; - e->_next = NULL; -#ifdef DEBUGBUILD - e->_init = NODEREM; /* specific pattern on remove - not zero */ -#endif + e->ptr = NULL; + e->prev = NULL; + e->next = NULL; - --list->_size; + --list->size; /* call the dtor() last for when it actually frees the 'e' memory itself */ - if(list->_dtor) - list->_dtor(user, ptr); -} - -void Curl_node_remove(struct Curl_llist_node *e) -{ - Curl_node_uremove(e, NULL); + if(list->dtor) + list->dtor(user, ptr); } void Curl_llist_destroy(struct Curl_llist *list, void *user) { if(list) { - DEBUGASSERT(list->_init == LLISTINIT); - while(list->_size > 0) - Curl_node_uremove(list->_tail, user); + while(list->size > 0) + Curl_llist_remove(list, list->tail, user); } } -/* Curl_llist_head() returns the first 'struct Curl_llist_node *', which - might be NULL */ -struct Curl_llist_node *Curl_llist_head(struct Curl_llist *list) -{ - DEBUGASSERT(list); - DEBUGASSERT(list->_init == LLISTINIT); - return VERIFYNODE(list->_head); -} - -#ifdef UNITTESTS -/* Curl_llist_tail() returns the last 'struct Curl_llist_node *', which - might be NULL */ -struct Curl_llist_node *Curl_llist_tail(struct Curl_llist *list) -{ - DEBUGASSERT(list); - DEBUGASSERT(list->_init == LLISTINIT); - return VERIFYNODE(list->_tail); -} -#endif - -/* Curl_llist_count() returns a size_t the number of nodes in the list */ -size_t Curl_llist_count(struct Curl_llist *list) -{ - DEBUGASSERT(list); - DEBUGASSERT(list->_init == LLISTINIT); - return list->_size; -} - -/* Curl_node_elem() returns the custom data from a Curl_llist_node */ -void *Curl_node_elem(struct Curl_llist_node *n) -{ - DEBUGASSERT(n); - DEBUGASSERT(n->_init == NODEINIT); - return n->_ptr; -} - -/* Curl_node_next() returns the next element in a list from a given - Curl_llist_node */ -struct Curl_llist_node *Curl_node_next(struct Curl_llist_node *n) -{ - DEBUGASSERT(n); - DEBUGASSERT(n->_init == NODEINIT); - return VERIFYNODE(n->_next); -} - -#ifdef UNITTESTS - -/* Curl_node_prev() returns the previous element in a list from a given - Curl_llist_node */ -struct Curl_llist_node *Curl_node_prev(struct Curl_llist_node *n) -{ - DEBUGASSERT(n); - DEBUGASSERT(n->_init == NODEINIT); - return VERIFYNODE(n->_prev); -} - -#endif - -struct Curl_llist *Curl_node_llist(struct Curl_llist_node *n) +size_t +Curl_llist_count(struct Curl_llist *list) { - DEBUGASSERT(n); - DEBUGASSERT(!n->_list || n->_init == NODEINIT); - return n->_list; + return list->size; } |