diff --git a/src/libCom/misc/dbDefs.h b/src/libCom/misc/dbDefs.h index 5aaca0909..8326c8802 100644 --- a/src/libCom/misc/dbDefs.h +++ b/src/libCom/misc/dbDefs.h @@ -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