ruby-changes:50034
From: normal <ko1@a...>
Date: Thu, 1 Feb 2018 17:59:33 +0900 (JST)
Subject: [ruby-changes:50034] normal:r62152 (trunk): ccan/list: sync with upstream
normal 2018-02-01 17:59:27 +0900 (Thu, 01 Feb 2018) New Revision: 62152 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=62152 Log: 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 Modified files: trunk/ccan/list/list.h Index: ccan/list/list.h =================================================================== --- ccan/list/list.h (revision 62151) +++ ccan/list/list.h (revision 62152) @@ -57,7 +57,7 @@ struct list_head https://github.com/ruby/ruby/blob/trunk/ccan/list/list.h#L57 * 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(con https://github.com/ruby/ruby/blob/trunk/ccan/list/list.h#L238 #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_(st https://github.com/ruby/ruby/blob/trunk/ccan/list/list.h#L662 * 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 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/