list: LIST_HEAD_INIT
authorRusty Russell <rusty@rustcorp.com.au>
Sat, 1 Jan 2011 06:43:04 +0000 (17:13 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Sat, 1 Jan 2011 06:43:04 +0000 (17:13 +1030)
I find hiding the declaration in LIST_HEAD() a bit weird.

ccan/list/list.h
ccan/list/test/run.c

index 02835a6b51e092c4b95fbc21a88bb71bbb46910a..f27a08829f24494a3b4ba1340152387783274c8b 100644 (file)
@@ -94,6 +94,20 @@ struct list_node *list_check_node(const struct list_node *n,
 #define list_debug_node(n) (n)
 #endif
 
+/**
+ * LIST_HEAD_INIT - initalizer for an empty list_head
+ * @name: the name of the list.
+ *
+ * Explicit initializer for an empty list.
+ *
+ * See also:
+ *     LIST_HEAD, list_head_init()
+ *
+ * Example:
+ *     static struct list_head my_list = LIST_HEAD_INIT(my_list);
+ */
+#define LIST_HEAD_INIT(name) { { &name.n, &name.n } }
+
 /**
  * LIST_HEAD - define and initalize an empty list_head
  * @name: the name of the list.
@@ -101,11 +115,14 @@ struct list_node *list_check_node(const struct list_node *n,
  * The LIST_HEAD macro defines a list_head and initializes it to an empty
  * list.  It can be prepended by "static" to define a static list_head.
  *
+ * See also:
+ *     LIST_HEAD_INIT, list_head_init()
+ *
  * Example:
  *     static LIST_HEAD(my_global_list);
  */
 #define LIST_HEAD(name) \
-       struct list_head name = { { &name.n, &name.n } }
+       struct list_head name = LIST_HEAD_INIT(name)
 
 /**
  * list_head_init - initialize a list_head
index 13a1da4198134d88cbeb56020c1ee9acd7cce24a..f80e364a276c1dd466737a80186db60f99cc57f3 100644 (file)
@@ -20,11 +20,14 @@ int main(int argc, char *argv[])
        struct parent parent;
        struct child c1, c2, c3, *c, *n;
        unsigned int i;
+       struct list_head list = LIST_HEAD_INIT(list);
 
-       plan_tests(47);
-       /* Test LIST_HEAD, list_empty and check_list */
+       plan_tests(49);
+       /* Test LIST_HEAD, LIST_HEAD_INIT, list_empty and check_list */
        ok1(list_empty(&static_list));
        ok1(list_check(&static_list, NULL));
+       ok1(list_empty(&list));
+       ok1(list_check(&list, NULL));
 
        parent.num_children = 0;
        list_head_init(&parent.children);