X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftal%2Ftal.c;fp=ccan%2Ftal%2Ftal.c;h=8360b2520690c31a594da58a4cef8cb57889d87e;hb=e81b527384ad5331a9cd35a9f21bc8ac6b16d137;hp=1eaa5749476aa3abd23992c16167b031c47175f6;hpb=5e37a0febfb89a2535f2eb9f0ea06a5546a39234;p=ccan diff --git a/ccan/tal/tal.c b/ccan/tal/tal.c index 1eaa5749..8360b252 100644 --- a/ccan/tal/tal.c +++ b/ccan/tal/tal.c @@ -630,31 +630,16 @@ tal_t *tal_first(const tal_t *root) return from_tal_hdr(c); } -tal_t *tal_next(const tal_t *root, const tal_t *prev) +tal_t *tal_next(const tal_t *prev) { - struct tal_hdr *c, *t = debug_tal(to_tal_hdr(prev)), *top; + struct tal_hdr *next, *prevhdr = debug_tal(to_tal_hdr(prev)); + struct list_head *head; - /* Children? */ - c = first_child(t); - if (c) - return from_tal_hdr(c); - - top = to_tal_hdr_or_null(root); - do { - struct tal_hdr *next; - struct list_node *end; - - end = &ignore_destroying_bit(t->parent_child)->children.n; - - next = list_entry(t->list.next, struct tal_hdr, list); - if (&next->list != end) - return from_tal_hdr(next); - - /* OK, go back to parent. */ - t = ignore_destroying_bit(t->parent_child)->parent; - } while (t != top); - - return NULL; + head = &ignore_destroying_bit(prevhdr->parent_child)->children; + next = list_next(head, prevhdr, list); + if (!next) + return NULL; + return from_tal_hdr(next); } tal_t *tal_parent(const tal_t *ctx)