diff options
author | Karel Zak | 2018-07-20 15:22:35 +0200 |
---|---|---|
committer | Karel Zak | 2018-07-20 15:22:35 +0200 |
commit | eb06d5d4b2f54a98b5779c11c3813832d6f98db2 (patch) | |
tree | 460547b3384014d6e4e18fc30291382b35e5bc31 /include | |
parent | libblkid: const qualifier cleanup (diff) | |
download | kernel-qcow2-util-linux-eb06d5d4b2f54a98b5779c11c3813832d6f98db2.tar.gz kernel-qcow2-util-linux-eb06d5d4b2f54a98b5779c11c3813832d6f98db2.tar.xz kernel-qcow2-util-linux-eb06d5d4b2f54a98b5779c11c3813832d6f98db2.zip |
include/list, include/c: update and container_of()
* update container_of() to version without "const" qualifier
* use container_of() in list_entry()
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/c.h | 12 | ||||
-rw-r--r-- | include/list.h | 7 |
2 files changed, 12 insertions, 7 deletions
diff --git a/include/c.h b/include/c.h index c8bcb375b..a240f4f6c 100644 --- a/include/c.h +++ b/include/c.h @@ -129,10 +129,16 @@ #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) #endif +/* + * container_of - cast a member of a structure out to the containing structure + * @ptr: the pointer to the member. + * @type: the type of the container struct this is embedded in. + * @member: the name of the member within the struct. + */ #ifndef container_of -#define container_of(ptr, type, member) __extension__ ({ \ - const __typeof__( ((type *)0)->member ) *__mptr = (ptr); \ - (type *)( (char *)__mptr - offsetof(type,member) );}) +#define container_of(ptr, type, member) __extension__ ({ \ + void *__mptr = (void *)(ptr); \ + ((type *)(__mptr - offsetof(type, member))); }) #endif #ifndef HAVE_PROGRAM_INVOCATION_SHORT_NAME diff --git a/include/list.h b/include/list.h index cf022fb22..f3ffc7985 100644 --- a/include/list.h +++ b/include/list.h @@ -12,6 +12,8 @@ #ifndef UTIL_LINUX_LIST_H #define UTIL_LINUX_LIST_H +#include "c.h" + /* TODO: use AC_C_INLINE */ #ifdef __GNUC__ #define _INLINE_ static __inline__ @@ -161,10 +163,7 @@ _INLINE_ void list_splice(struct list_head *list, struct list_head *head) * @type: the type of the struct this is embedded in. * @member: the name of the list_struct within the struct. */ -#define list_entry(ptr, type, member) __extension__ ({ \ - const typeof( ((type *)0)->member ) *__mptr = (ptr); \ - (type *)( (char *)__mptr - offsetof(type,member) );}) - +#define list_entry(ptr, type, member) container_of(ptr, type, member) #define list_first_entry(head, type, member) \ ((head) && (head)->next != (head) ? list_entry((head)->next, type, member) : NULL) |