diff options
author | Lennart Poettering <lennart@poettering.net> | 2013-10-14 06:10:14 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2013-10-14 06:11:19 +0200 |
commit | 71fda00f320379f5cbee8e118848de98caaa229d (patch) | |
tree | 00a913086d70abadb1185e1343d97df860b0d612 /src/shared/list.h | |
parent | 14bf2c9d375db6a4670bc0ef0e521e35a939a498 (diff) |
list: make our list macros a bit easier to use by not requring type spec on each invocation
We can determine the list entry type via the typeof() gcc construct, and
so we should to make the macros much shorter to use.
Diffstat (limited to 'src/shared/list.h')
-rw-r--r-- | src/shared/list.h | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/src/shared/list.h b/src/shared/list.h index 476757460a..e55b91cea4 100644 --- a/src/shared/list.h +++ b/src/shared/list.h @@ -31,23 +31,23 @@ t *name##_next, *name##_prev /* Initialize the list's head */ -#define LIST_HEAD_INIT(t,head) \ +#define LIST_HEAD_INIT(head) \ do { \ (head) = NULL; } \ while(false) /* Initialize a list item */ -#define LIST_INIT(t,name,item) \ +#define LIST_INIT(name,item) \ do { \ - t *_item = (item); \ + typeof(*(item)) *_item = (item); \ assert(_item); \ _item->name##_prev = _item->name##_next = NULL; \ } while(false) /* Prepend an item to the list */ -#define LIST_PREPEND(t,name,head,item) \ +#define LIST_PREPEND(name,head,item) \ do { \ - t **_head = &(head), *_item = (item); \ + typeof(*(head)) **_head = &(head), *_item = (item); \ assert(_item); \ if ((_item->name##_next = *_head)) \ _item->name##_next->name##_prev = _item; \ @@ -56,9 +56,9 @@ } while(false) /* Remove an item from the list */ -#define LIST_REMOVE(t,name,head,item) \ +#define LIST_REMOVE(name,head,item) \ do { \ - t **_head = &(head), *_item = (item); \ + typeof(*(head)) **_head = &(head), *_item = (item); \ assert(_item); \ if (_item->name##_next) \ _item->name##_next->name##_prev = _item->name##_prev; \ @@ -72,9 +72,9 @@ } while(false) /* Find the head of the list */ -#define LIST_FIND_HEAD(t,name,item,head) \ +#define LIST_FIND_HEAD(name,item,head) \ do { \ - t *_item = (item); \ + typeof(*(item)) *_item = (item); \ assert(_item); \ while (_item->name##_prev) \ _item = _item->name##_prev; \ @@ -82,9 +82,9 @@ } while (false) /* Find the tail of the list */ -#define LIST_FIND_TAIL(t,name,item,tail) \ +#define LIST_FIND_TAIL(name,item,tail) \ do { \ - t *_item = (item); \ + typeof(*(item)) *_item = (item); \ assert(_item); \ while (_item->name##_next) \ _item = _item->name##_next; \ @@ -92,9 +92,9 @@ } while (false) /* Insert an item after another one (a = where, b = what) */ -#define LIST_INSERT_AFTER(t,name,head,a,b) \ +#define LIST_INSERT_AFTER(name,head,a,b) \ do { \ - t **_head = &(head), *_a = (a), *_b = (b); \ + typeof(*(head)) **_head = &(head), *_a = (a), *_b = (b); \ assert(_b); \ if (!_a) { \ if ((_b->name##_next = *_head)) \ |