From: Nathael Pajani Date: Wed, 2 Sep 2015 09:08:07 +0000 (+0200) Subject: Provide offsetof when there is no builtin Add container_of X-Git-Url: http://git.techno-innov.fr/?a=commitdiff_plain;h=c7fb3895a62e67c8a3e9f13496b536db8cf72fd4;p=soft%2Flpc122x%2Fcore Provide offsetof when there is no builtin Add container_of --- diff --git a/include/lib/stddef.h b/include/lib/stddef.h index b410eb6..0ba2685 100644 --- a/include/lib/stddef.h +++ b/include/lib/stddef.h @@ -22,6 +22,24 @@ #ifndef LIB_STDDEF_H #define LIB_STDDEF_H -#define offsetof(type, member) __builtin_offsetof (type, member) +/** + * offsetof - return the offset of a member in the containing structure. + */ +#ifdef __builtin_offsetof + #define offsetof(type, member) __builtin_offsetof (type, member) +#else + #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. + */ +#define container_of(ptr, type, member) ({ \ + const typeof( ((type *)0)->member ) *__mptr = (ptr); \ + (type *)( (char *)__mptr - offsetof(type,member) );}) + #endif /* LIB_STDDEF_H */