xref: /titanic_52/usr/src/uts/common/sys/stddef.h (revision 97c1859826fb1167b66c2a42766e5274758b3817)
14bf09fccSToomas Soome /*
24bf09fccSToomas Soome  * This file and its contents are supplied under the terms of the
34bf09fccSToomas Soome  * Common Development and Distribution License ("CDDL"), version 1.0.
44bf09fccSToomas Soome  * You may only use this file in accordance with the terms of version
54bf09fccSToomas Soome  * 1.0 of the CDDL.
64bf09fccSToomas Soome  *
74bf09fccSToomas Soome  * A full copy of the text of the CDDL should have accompanied this
84bf09fccSToomas Soome  * source.  A copy of the CDDL is also available via the Internet at
94bf09fccSToomas Soome  * http://www.illumos.org/license/CDDL.
104bf09fccSToomas Soome  */
114bf09fccSToomas Soome 
124bf09fccSToomas Soome /*
134bf09fccSToomas Soome  * Copyright 2017 Toomas Soome <tsoome@me.com>
144bf09fccSToomas Soome  */
154bf09fccSToomas Soome 
164bf09fccSToomas Soome #ifndef _SYS_STDDEF_H
174bf09fccSToomas Soome #define	_SYS_STDDEF_H
184bf09fccSToomas Soome 
194bf09fccSToomas Soome /*
204bf09fccSToomas Soome  * Commonly used macros and definitions.
214bf09fccSToomas Soome  */
224bf09fccSToomas Soome 
234bf09fccSToomas Soome #ifdef __cplusplus
244bf09fccSToomas Soome extern "C" {
254bf09fccSToomas Soome #endif
264bf09fccSToomas Soome 
274bf09fccSToomas Soome #if !defined(offsetof)
284bf09fccSToomas Soome #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
294bf09fccSToomas Soome #define	offsetof(s, m)	__builtin_offsetof(s, m)
304bf09fccSToomas Soome #else
314bf09fccSToomas Soome #if __cplusplus >= 199711L
324bf09fccSToomas Soome #define	offsetof(s, m)	(std::size_t)(&(((s *)NULL)->m))
334bf09fccSToomas Soome #else
344bf09fccSToomas Soome #define	offsetof(s, m)	((size_t)(&(((s *)NULL)->m)))
354bf09fccSToomas Soome #endif
364bf09fccSToomas Soome #endif
374bf09fccSToomas Soome #endif /* !offsetof */
384bf09fccSToomas Soome 
394bf09fccSToomas Soome #if !defined(container_of)
40*97c18598SToomas Soome 
41*97c18598SToomas Soome /*
42*97c18598SToomas Soome  * We must not expose container_of() to userland, but we want it
43*97c18598SToomas Soome  * to be available for early boot and for the kernel.
44*97c18598SToomas Soome  */
45*97c18598SToomas Soome #if ((defined(_KERNEL) || defined(_FAKE_KERNEL)) && !defined(_KMEMUSER)) || \
46*97c18598SToomas Soome 	(defined(_BOOT) && defined(_KMEMUSER))
474bf09fccSToomas Soome #define	container_of(m, s, name)			\
484bf09fccSToomas Soome 	(void *)((uintptr_t)(m) - (uintptr_t)offsetof(s, name))
49*97c18598SToomas Soome #endif
504bf09fccSToomas Soome #endif /* !container_of */
514bf09fccSToomas Soome 
524bf09fccSToomas Soome #ifdef __cplusplus
534bf09fccSToomas Soome }
544bf09fccSToomas Soome #endif
554bf09fccSToomas Soome 
564bf09fccSToomas Soome #endif /* _SYS_STDDEF_H */
57