hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
kernel/include/uapi/linux/stddef.h
....@@ -1,6 +1,31 @@
11 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2
+#ifndef _UAPI_LINUX_STDDEF_H
3
+#define _UAPI_LINUX_STDDEF_H
4
+
25 #include <linux/compiler_types.h>
36
47 #ifndef __always_inline
58 #define __always_inline inline
69 #endif
10
+
11
+/**
12
+ * __struct_group() - Create a mirrored named and anonyomous struct
13
+ *
14
+ * @TAG: The tag name for the named sub-struct (usually empty)
15
+ * @NAME: The identifier name of the mirrored sub-struct
16
+ * @ATTRS: Any struct attributes (usually empty)
17
+ * @MEMBERS: The member declarations for the mirrored structs
18
+ *
19
+ * Used to create an anonymous union of two structs with identical layout
20
+ * and size: one anonymous and one named. The former's members can be used
21
+ * normally without sub-struct naming, and the latter can be used to
22
+ * reason about the start, end, and size of the group of struct members.
23
+ * The named struct can also be explicitly tagged for layer reuse, as well
24
+ * as both having struct attributes appended.
25
+ */
26
+#define __struct_group(TAG, NAME, ATTRS, MEMBERS...) \
27
+ union { \
28
+ struct { MEMBERS } ATTRS; \
29
+ struct TAG { MEMBERS } ATTRS NAME; \
30
+ }
31
+#endif