I find hiding the declaration in LIST_HEAD() a bit weird.
#define list_debug_node(n) (n)
#endif
#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.
/**
* LIST_HEAD - define and initalize an empty list_head
* @name: the name of the list.
* 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.
*
* 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) \
* 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
/**
* list_head_init - initialize a list_head
struct parent parent;
struct child c1, c2, c3, *c, *n;
unsigned int i;
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(&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);
parent.num_children = 0;
list_head_init(&parent.children);