summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-02-01 08:59:27 +0000
committernormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-02-01 08:59:27 +0000
commit7af65953de0127d971a7dc20bea611213bd1473c (patch)
tree3aea320d21d2222f201c90624de881f1b9b7bc24
parent6eeb0f7ef48c9bc27f7d8508a1b43ae6128fcc96 (diff)
ccan/list: sync with upstream
This brings us up-to-date with ccan/list 5dbd87b876434dd703dfcc30cb0503118aac2076 git://git.ozlabs.org/~ccan/ccan This is a combination of 3 commits from ccan: list: add parens to gaurd macro args in LIST_INIT ccan/list: Add list_empty_nocheck list: trivial: fix typos in list_for_each_off's documentation git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62152 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ccan/list/list.h25
1 files changed, 20 insertions, 5 deletions
diff --git a/ccan/list/list.h b/ccan/list/list.h
index ca9f9f1f7f..59ab45ee53 100644
--- a/ccan/list/list.h
+++ b/ccan/list/list.h
@@ -57,7 +57,7 @@ struct list_head
* Example:
* static struct list_head my_list = LIST_HEAD_INIT(my_list);
*/
-#define LIST_HEAD_INIT(name) { { &name.n, &name.n } }
+#define LIST_HEAD_INIT(name) { { &(name).n, &(name).n } }
/**
* LIST_HEAD - define and initialize an empty list_head
@@ -238,6 +238,21 @@ static inline int list_empty_nodebug(const struct list_head *h)
#endif
/**
+ * list_empty_nocheck - is a list empty?
+ * @h: the list_head
+ *
+ * If the list is empty, returns true. This doesn't perform any
+ * debug check for list consistency, so it can be called without
+ * locks, racing with the list being modified. This is ok for
+ * checks where an incorrect result is not an issue (optimized
+ * bail out path for example).
+ */
+static inline bool list_empty_nocheck(const struct list_head *h)
+{
+ return h->n.next == &h->n;
+}
+
+/**
* list_del - delete an entry from an (unknown) linked list.
* @n: the list_node to delete from the list.
*
@@ -647,12 +662,12 @@ static inline void list_prepend_list_(struct list_head *to,
* so you can break and continue as normal.
*
* WARNING! Being the low-level macro that it is, this wrapper doesn't know
- * nor care about the type of @i. The only assumtion made is that @i points
+ * nor care about the type of @i. The only assumption made is that @i points
* to a chunk of memory that at some @offset, relative to @i, contains a
- * properly filled `struct node_list' which in turn contains pointers to
- * memory chunks and it's turtles all the way down. Whith all that in mind
+ * properly filled `struct list_node' which in turn contains pointers to
+ * memory chunks and it's turtles all the way down. With all that in mind
* remember that given the wrong pointer/offset couple this macro will
- * happilly churn all you memory untill SEGFAULT stops it, in other words
+ * happily churn all you memory until SEGFAULT stops it, in other words
* caveat emptor.
*
* It is worth mentioning that one of legitimate use-cases for that wrapper