1aae69bed019826ddec93f761514652a93d871e49Harald Welte#ifndef _LINUX_STDDEF_H 2aae69bed019826ddec93f761514652a93d871e49Harald Welte#define _LINUX_STDDEF_H 3aae69bed019826ddec93f761514652a93d871e49Harald Welte 4aae69bed019826ddec93f761514652a93d871e49Harald Welte#undef NULL 5aae69bed019826ddec93f761514652a93d871e49Harald Welte#if defined(__cplusplus) 6aae69bed019826ddec93f761514652a93d871e49Harald Welte#define NULL 0 7aae69bed019826ddec93f761514652a93d871e49Harald Welte#else 8aae69bed019826ddec93f761514652a93d871e49Harald Welte#define NULL ((void *)0) 9aae69bed019826ddec93f761514652a93d871e49Harald Welte#endif 10aae69bed019826ddec93f761514652a93d871e49Harald Welte 11aae69bed019826ddec93f761514652a93d871e49Harald Welte#undef offsetof 12aae69bed019826ddec93f761514652a93d871e49Harald Welte#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 13aae69bed019826ddec93f761514652a93d871e49Harald Welte 14aae69bed019826ddec93f761514652a93d871e49Harald Welte 15aae69bed019826ddec93f761514652a93d871e49Harald Welte/** 16aae69bed019826ddec93f761514652a93d871e49Harald Welte * container_of - cast a member of a structure out to the containing structure 17aae69bed019826ddec93f761514652a93d871e49Harald Welte * 18aae69bed019826ddec93f761514652a93d871e49Harald Welte * @ptr: the pointer to the member. 19aae69bed019826ddec93f761514652a93d871e49Harald Welte * @type: the type of the container struct this is embedded in. 20aae69bed019826ddec93f761514652a93d871e49Harald Welte * @member: the name of the member within the struct. 21aae69bed019826ddec93f761514652a93d871e49Harald Welte * 22aae69bed019826ddec93f761514652a93d871e49Harald Welte */ 23aae69bed019826ddec93f761514652a93d871e49Harald Welte#define container_of(ptr, type, member) ({ \ 24aae69bed019826ddec93f761514652a93d871e49Harald Welte const typeof( ((type *)0)->member ) *__mptr = (ptr); \ 25aae69bed019826ddec93f761514652a93d871e49Harald Welte (type *)( (char *)__mptr - offsetof(type,member) );}) 26aae69bed019826ddec93f761514652a93d871e49Harald Welte 27aae69bed019826ddec93f761514652a93d871e49Harald Welte/* 28aae69bed019826ddec93f761514652a93d871e49Harald Welte * Check at compile time that something is of a particular type. 29aae69bed019826ddec93f761514652a93d871e49Harald Welte * Always evaluates to 1 so you may use it easily in comparisons. 30aae69bed019826ddec93f761514652a93d871e49Harald Welte */ 31aae69bed019826ddec93f761514652a93d871e49Harald Welte#define typecheck(type,x) \ 32aae69bed019826ddec93f761514652a93d871e49Harald Welte({ type __dummy; \ 33aae69bed019826ddec93f761514652a93d871e49Harald Welte typeof(x) __dummy2; \ 34aae69bed019826ddec93f761514652a93d871e49Harald Welte (void)(&__dummy == &__dummy2); \ 35aae69bed019826ddec93f761514652a93d871e49Harald Welte 1; \ 36aae69bed019826ddec93f761514652a93d871e49Harald Welte}) 37aae69bed019826ddec93f761514652a93d871e49Harald Welte 38aae69bed019826ddec93f761514652a93d871e49Harald Welte 39aae69bed019826ddec93f761514652a93d871e49Harald Welte#endif 40