blob: 998a4ba28eba40c966f7e4a6aaa68f46f6b3466b [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001/* SPDX-License-Identifier: GPL-2.0 */
Linus Torvalds1da177e2005-04-16 15:20:36 -07002#ifndef _LINUX_STDDEF_H
3#define _LINUX_STDDEF_H
4
David Howells607ca462012-10-13 10:46:48 +01005#include <uapi/linux/stddef.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -07006
Lubos Lunak2084c242012-03-21 14:08:24 +01007#undef NULL
8#define NULL ((void *)0)
9
Richard Knutsson6e218282006-09-30 23:27:11 -070010enum {
11 false = 0,
12 true = 1
13};
14
Linus Torvalds1da177e2005-04-16 15:20:36 -070015#undef offsetof
16#ifdef __compiler_offsetof
Joe Perches8c7fbe52015-06-25 15:01:16 -070017#define offsetof(TYPE, MEMBER) __compiler_offsetof(TYPE, MEMBER)
Linus Torvalds1da177e2005-04-16 15:20:36 -070018#else
Joe Perches8c7fbe52015-06-25 15:01:16 -070019#define offsetof(TYPE, MEMBER) ((size_t)&((TYPE *)0)->MEMBER)
Linus Torvalds1da177e2005-04-16 15:20:36 -070020#endif
Denys Vlasenko38764882015-03-09 15:52:17 +010021
22/**
Kees Cook4229a472018-01-10 12:53:20 -080023 * sizeof_field(TYPE, MEMBER)
24 *
25 * @TYPE: The structure containing the field of interest
26 * @MEMBER: The field to return the size of
27 */
28#define sizeof_field(TYPE, MEMBER) sizeof((((TYPE *)0)->MEMBER))
29
30/**
Denys Vlasenko38764882015-03-09 15:52:17 +010031 * offsetofend(TYPE, MEMBER)
32 *
33 * @TYPE: The type of the structure
34 * @MEMBER: The member within the structure to get the end offset of
35 */
36#define offsetofend(TYPE, MEMBER) \
Kees Cook4229a472018-01-10 12:53:20 -080037 (offsetof(TYPE, MEMBER) + sizeof_field(TYPE, MEMBER))
Joe Perches8c7fbe52015-06-25 15:01:16 -070038
39#endif