From f8f3b33ea58a03dc3c17b03256530b6990ce9191 Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Sat, 14 Dec 2019 18:35:51 +0100 Subject: [PATCH] lib/replace: prefer over MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This prevents the following compile error that may happens if "system/filesys.h" is included before "system/capability.h" on Ubuntu 16.04: [1802/4407] Compiling source3/lib/system.c In file included from ../../lib/replace/system/filesys.h:112:0, from ../../source3/include/vfs.h:29, from ../../source3/include/smb.h:150, from ../../source3/include/includes.h:284, from ../../source3/lib/system.c:23: /usr/include/x86_64-linux-gnu/sys/xattr.h:32:3: error: expected identifier before numeric constant XATTR_CREATE = 1, /* set value, fail if attr already exists. */ ^ The above error is from compiling a source tree which includes a change that adds an include "system/filesys.h" to the top of "source3/include/vfs.h". "source3/lib/system.c" has the following includes: #include "includes.h" #include "system/syslog.h" #include "system/capability.h" #include "system/passwd.h" #include "system/filesys.h" #include "../lib/util/setid.h" The first include of "includes.h" pulls in "vfs.h" which will pull in "system/filesys.h" with the mentioned change. "system/filesys.h" pulls in which has this define #define XATTR_CREATE 0x1 Later in "source3/lib/system.c" "system/capability.h" is included which includes on Ubuntu 16.04 (not in later versions of glibc). This defines the XATTR_* values as an enum: enum { XATTR_CREATE = 1, /* set value, fail if attr already exists. */ XATTR_REPLACE = 2 /* set value, fail if attr does not exist. */ }; The previous define of XATTR_CREATE as 1 makes this enum { 1 = 1, /* set value, fail if attr already exists. */ 2 = 2 /* set value, fail if attr does not exist. */ }; which is invalid C. The compiler error diagnostic is a bit confusing, as it prints the original enum from the include file. See also: Signed-off-by: Ralph Boehme Reviewed-by: Björn Baumbach --- lib/replace/system/filesys.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/replace/system/filesys.h b/lib/replace/system/filesys.h index afde4eacb39..976b2aeec5e 100644 --- a/lib/replace/system/filesys.h +++ b/lib/replace/system/filesys.h @@ -108,10 +108,10 @@ #endif /* mutually exclusive (SuSE 8.2) */ -#if defined(HAVE_ATTR_XATTR_H) -#include -#elif defined(HAVE_SYS_XATTR_H) +#if defined(HAVE_SYS_XATTR_H) #include +#elif defined(HAVE_ATTR_XATTR_H) +#include #elif defined(HAVE_SYS_ATTRIBUTES_H) #include #elif defined(HAVE_ATTR_ATTRIBUTES_H)