summaryrefslogtreecommitdiffstats
path: root/Utilities/cmcurl/lib/llist.h
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2024-09-18 15:42:10 (GMT)
committerBrad King <brad.king@kitware.com>2024-09-18 15:51:18 (GMT)
commitce908c42a37fd56325aff80d2c63a4a811ce9389 (patch)
tree98319de414b3d57d58a2e7710985b101fcb022e5 /Utilities/cmcurl/lib/llist.h
parent862bd5defc382e6863ef989aac74e0587925b30d (diff)
parent1a2b208170bd650f328800afd5584a5d056f195d (diff)
downloadCMake-ce908c42a37fd56325aff80d2c63a4a811ce9389.zip
CMake-ce908c42a37fd56325aff80d2c63a4a811ce9389.tar.gz
CMake-ce908c42a37fd56325aff80d2c63a4a811ce9389.tar.bz2
Merge branch 'upstream-curl' into update-curl
* upstream-curl: curl 2024-09-18 (7eb8c048)
Diffstat (limited to 'Utilities/cmcurl/lib/llist.h')
-rw-r--r--Utilities/cmcurl/lib/llist.h67
1 files changed, 51 insertions, 16 deletions
diff --git a/Utilities/cmcurl/lib/llist.h b/Utilities/cmcurl/lib/llist.h
index d75582f..2658186 100644
--- a/Utilities/cmcurl/lib/llist.h
+++ b/Utilities/cmcurl/lib/llist.h
@@ -27,28 +27,63 @@
#include "curl_setup.h"
#include <stddef.h>
-typedef void (*Curl_llist_dtor)(void *, void *);
+typedef void (*Curl_llist_dtor)(void *user, void *elem);
-struct Curl_llist_element {
- void *ptr;
- struct Curl_llist_element *prev;
- struct Curl_llist_element *next;
-};
+/* none of these struct members should be referenced directly, use the
+ dedicated functions */
struct Curl_llist {
- struct Curl_llist_element *head;
- struct Curl_llist_element *tail;
- Curl_llist_dtor dtor;
- size_t size;
+ struct Curl_llist_node *_head;
+ struct Curl_llist_node *_tail;
+ Curl_llist_dtor _dtor;
+ size_t _size;
+#ifdef DEBUGBUILD
+ int _init; /* detect API usage mistakes */
+#endif
+};
+
+struct Curl_llist_node {
+ struct Curl_llist *_list; /* the list where this belongs */
+ void *_ptr;
+ struct Curl_llist_node *_prev;
+ struct Curl_llist_node *_next;
+#ifdef DEBUGBUILD
+ int _init; /* detect API usage mistakes */
+#endif
};
void Curl_llist_init(struct Curl_llist *, Curl_llist_dtor);
-void Curl_llist_insert_next(struct Curl_llist *, struct Curl_llist_element *,
- const void *, struct Curl_llist_element *node);
+void Curl_llist_insert_next(struct Curl_llist *, struct Curl_llist_node *,
+ const void *, struct Curl_llist_node *node);
void Curl_llist_append(struct Curl_llist *,
- const void *, struct Curl_llist_element *node);
-void Curl_llist_remove(struct Curl_llist *, struct Curl_llist_element *,
- void *);
-size_t Curl_llist_count(struct Curl_llist *);
+ const void *, struct Curl_llist_node *node);
+void Curl_node_uremove(struct Curl_llist_node *, void *);
+void Curl_node_remove(struct Curl_llist_node *);
void Curl_llist_destroy(struct Curl_llist *, void *);
+
+/* 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);
+
+/* 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);
+
+/* Curl_llist_count() returns a size_t the number of nodes in the list */
+size_t Curl_llist_count(struct Curl_llist *list);
+
+/* Curl_node_elem() returns the custom data from a Curl_llist_node */
+void *Curl_node_elem(struct Curl_llist_node *n);
+
+/* 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);
+
+/* 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);
+
+/* Curl_node_llist() return the list the node is in or NULL. */
+struct Curl_llist *Curl_node_llist(struct Curl_llist_node *n);
+
#endif /* HEADER_CURL_LLIST_H */