From c7fb3895a62e67c8a3e9f13496b536db8cf72fd4 Mon Sep 17 00:00:00 2001 From: Nathael Pajani Date: Wed, 2 Sep 2015 11:08:07 +0200 Subject: [PATCH] Provide offsetof when there is no builtin Add container_of --- include/lib/stddef.h | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) 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 */ -- 2.43.0