diff options
Diffstat (limited to 'include/c.h')
-rw-r--r-- | include/c.h | 12 |
1 files changed, 9 insertions, 3 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 |