Added CONTAINER macro, from Micheal Davidsaver (BNL).

This commit is contained in:
Andrew Johnson
2009-08-04 16:31:06 +00:00
parent 1a2fa1bc86
commit 4868904839
+16 -2
View File
@@ -27,7 +27,8 @@
#endif
#define FALSE 0
#ifndef LOCAL
/* deprecated, use static */
#ifndef LOCAL
# define LOCAL static
#endif
@@ -36,11 +37,24 @@
# define NELEMENTS(array) (sizeof (array) / sizeof ((array) [0]))
#endif
/* byte offset of member in structure*/
/* byte offset of member in structure - deprecated, use offsetof */
#ifndef OFFSET
# define OFFSET(structure, member) offsetof(structure, member)
#endif
/* Subtract member byte offset, returning pointer to parent object */
#ifndef CONTAINER
# ifdef __GNUC__
# define CONTAINER(ptr, structure, member) ({ \
const __typeof(((structure*)0)->member) *_ptr = (ptr); \
(structure*)((char*)_ptr - offsetof(structure, member)); \
})
# else
# define CONTAINER(ptr, structure, member) \
((structure*)((char*)(ptr) - offsetof(structure, member)))
# endif
#endif
/*Process Variable Name Size */
/* PVNAME_STRINGSZ includes the nil terminator */
#define PVNAME_STRINGSZ 61