History

xattr: guard against simultaneous glibc header inclusion

If the glibc xattr.h header is included after the uapi header, compilation fails due to an enum re-using a #define from the uapi header. Protect against this by guarding the define and enum inclusions against each other. (See https://lists.debian.org/debian-glibc/2014/03/msg00029.html and https://sourceware.org/glibc/wiki/Synchronizing_Headers for more information.)

Serge Hallyn committed 12 years ago

Commit ea1a8211 parent e9107f82 files · +16 −0Browse files

Showing the changes to include/uapi/linux (2 of 2 files). Show all

Unified · Split

2 files
  1. include/uapi/linux/libc-compat.h +9 −0
  2. include/uapi/linux/xattr.h +7 −0
include/uapi/linux/libc-compat.h+9−0
@@ -85,6 +85,12 @@ · 84 unmodified lines
8585
8686 #endif /* _NETINET_IN_H */
8787
88+/* Definitions for xattr.h */
89+#if defined(_SYS_XATTR_H)
90+#define __UAPI_DEF_XATTR 0
91+#else
92+#define __UAPI_DEF_XATTR 1
93+#endif
8894
8995 /* If we did not see any headers from any supported C libraries,
9096 * or we are being included in the kernel, then define everything
@@ -98,6 +104,9 @@ · 7 unmodified lines
98104 #define __UAPI_DEF_IPV6_MREQ 1
99105 #define __UAPI_DEF_IPPROTO_V6 1
100106
107+/* Definitions for xattr.h */
108+#define __UAPI_DEF_XATTR 1
109+
101110 #endif /* __GLIBC__ */
102111
103112 #endif /* _UAPI_LIBC_COMPAT_H */
include/uapi/linux/xattr.h+7−0
@@ -7,11 +7,18 @@ · 6 unmodified lines
77 Copyright (c) 2001-2002 Silicon Graphics, Inc. All Rights Reserved.
88 Copyright (c) 2004 Red Hat, Inc., James Morris <jmorris@redhat.com>
99 */
10+
11+#include <linux/libc-compat.h>
12+
1013 #ifndef _UAPI_LINUX_XATTR_H
1114 #define _UAPI_LINUX_XATTR_H
1215
16+#ifdef __UAPI_DEF_XATTR
17+#define __USE_KERNEL_XATTR_DEFS
18+
1319 #define XATTR_CREATE 0x1 /* set value, fail if attr already exists */
1420 #define XATTR_REPLACE 0x2 /* set value, fail if attr does not exist */
21+#endif
1522
1623 /* Namespaces */
1724 #define XATTR_OS2_PREFIX "os2."