From: Rusty Russell Date: Sat, 9 Nov 2013 10:16:58 +0000 (+1030) Subject: list: fix list_prev and list_next on const lists. X-Git-Url: http://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=447cfb714cdd9e09677f5d66b632c452c11a7055 list: fix list_prev and list_next on const lists. Signed-off-by: Rusty Russell --- diff --git a/ccan/list/list.h b/ccan/list/list.h index 03614873..3153d550 100644 --- a/ccan/list/list.h +++ b/ccan/list/list.h @@ -604,8 +604,8 @@ static inline struct list_node *list_node_from_off_(void *ptr, size_t off) #endif /* Returns member, or NULL if at end of list. */ -static inline void *list_entry_or_null(struct list_head *h, - struct list_node *n, +static inline void *list_entry_or_null(const struct list_head *h, + const struct list_node *n, size_t off) { if (n == &h->n) diff --git a/ccan/list/test/run-list_prev-list_next.c b/ccan/list/test/run-list_prev-list_next.c index 85611d9d..b496f11f 100644 --- a/ccan/list/test/run-list_prev-list_next.c +++ b/ccan/list/test/run-list_prev-list_next.c @@ -18,8 +18,10 @@ int main(int argc, char *argv[]) { struct parent parent; struct child c1, c2, c3; + const struct parent *p; + const struct child *c; - plan_tests(12); + plan_tests(20); parent.num_children = 0; list_head_init(&parent.children); @@ -46,5 +48,18 @@ int main(int argc, char *argv[]) ok1(list_prev(&parent.children, &c2, list) == &c1); ok1(list_next(&parent.children, &c3, list) == NULL); ok1(list_prev(&parent.children, &c3, list) == &c2); + + /* Const variants */ + p = &parent; + c = &c2; + ok1(list_next(&p->children, &c1, list) == &c2); + ok1(list_prev(&p->children, &c1, list) == NULL); + ok1(list_next(&p->children, c, list) == &c3); + ok1(list_prev(&p->children, c, list) == &c1); + ok1(list_next(&parent.children, c, list) == &c3); + ok1(list_prev(&parent.children, c, list) == &c1); + ok1(list_next(&p->children, &c3, list) == NULL); + ok1(list_prev(&p->children, &c3, list) == &c2); + return exit_status(); }