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