From c975dc96b7e81d709f6ec71b539db06794a949cc Mon Sep 17 00:00:00 2001 From: normal Date: Sat, 13 Sep 2014 23:49:15 +0000 Subject: ccan/list: new list_{del,node}_init functions * ccan/list/list.h (list_del_init, list_node_init): new functions for multiple list_del() calls [ccan ec8654d94d3c5c47aa5f82698f7e8048c79765b1] (Rusty Russell) git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47577 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ccan/list/list.h | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) (limited to 'ccan') diff --git a/ccan/list/list.h b/ccan/list/list.h index 838ded45d5..749db7849a 100644 --- a/ccan/list/list.h +++ b/ccan/list/list.h @@ -91,6 +91,18 @@ static inline void list_head_init(struct list_head *h) h->n.next = h->n.prev = &h->n; } +/** + * list_node_init - initialize a list_node + * @n: the list_node to link to itself. + * + * You don't need to use this normally! But it lets you list_del(@n) + * safely. + */ +static inline void list_node_init(struct list_node *n) +{ + n->next = n->prev = n; +} + /** * list_add - add an entry at the start of a linked list. * @h: the list_head to add the node to @@ -183,7 +195,7 @@ static inline int list_empty_nodebug(const struct list_head *h) * another list, but not deleted again. * * See also: - * list_del_from() + * list_del_from(), list_del_init() * * Example: * list_del(&child->list); @@ -201,6 +213,27 @@ static inline void list_del_(struct list_node *n, const char* abortstr) #endif } +/** + * list_del_init - delete a node, and reset it so it can be deleted again. + * @n: the list_node to be deleted. + * + * list_del(@n) or list_del_init() again after this will be safe, + * which can be useful in some cases. + * + * See also: + * list_del_from(), list_del() + * + * Example: + * list_del_init(&child->list); + * parent->num_children--; + */ +#define list_del_init(n) list_del_init_(n, LIST_LOC) +static inline void list_del_init_(struct list_node *n, const char *abortstr) +{ + list_del_(n, abortstr); + list_node_init(n); +} + /** * list_del_from - delete an entry from a known linked list. * @h: the list_head the node is in. -- cgit v1.2.1