Commit 447cfb71 authored by Rusty Russell's avatar Rusty Russell

list: fix list_prev and list_next on const lists.

Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
parent efd79fad
...@@ -604,8 +604,8 @@ static inline struct list_node *list_node_from_off_(void *ptr, size_t off) ...@@ -604,8 +604,8 @@ static inline struct list_node *list_node_from_off_(void *ptr, size_t off)
#endif #endif
/* Returns member, or NULL if at end of list. */ /* Returns member, or NULL if at end of list. */
static inline void *list_entry_or_null(struct list_head *h, static inline void *list_entry_or_null(const struct list_head *h,
struct list_node *n, const struct list_node *n,
size_t off) size_t off)
{ {
if (n == &h->n) if (n == &h->n)
......
...@@ -18,8 +18,10 @@ int main(int argc, char *argv[]) ...@@ -18,8 +18,10 @@ int main(int argc, char *argv[])
{ {
struct parent parent; struct parent parent;
struct child c1, c2, c3; struct child c1, c2, c3;
const struct parent *p;
const struct child *c;
plan_tests(12); plan_tests(20);
parent.num_children = 0; parent.num_children = 0;
list_head_init(&parent.children); list_head_init(&parent.children);
...@@ -46,5 +48,18 @@ int main(int argc, char *argv[]) ...@@ -46,5 +48,18 @@ int main(int argc, char *argv[])
ok1(list_prev(&parent.children, &c2, list) == &c1); ok1(list_prev(&parent.children, &c2, list) == &c1);
ok1(list_next(&parent.children, &c3, list) == NULL); ok1(list_next(&parent.children, &c3, list) == NULL);
ok1(list_prev(&parent.children, &c3, list) == &c2); 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(); return exit_status();
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment