1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00
samba-mirror/lib/replace/system
Ralph Boehme f8f3b33ea5 lib/replace: prefer <sys/xattr.h> over <attr/xattr.h>
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
<attr/xattr.h> which has this define

  #define XATTR_CREATE  0x1

Later in "source3/lib/system.c" "system/capability.h" is included which includes
<sys/xattr.h> 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:

<https://bugs.freedesktop.org/show_bug.cgi?id=78741>
<https://bugs.launchpad.net/ubuntu/+source/attr/+bug/1288091>
<https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=756097>

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Björn Baumbach <bb@samba.org>
2019-12-18 10:13:41 +00:00
..
capability.h replace: only include <sys/capability.h> with HAVE_POSIX_CAPABILITIES 2019-01-29 22:09:07 +01:00
dir.h replace: Use #ifdef instead of #if for config.h definitions 2018-11-28 23:19:21 +01:00
filesys.h lib/replace: prefer <sys/xattr.h> over <attr/xattr.h> 2019-12-18 10:13:41 +00:00
glob.h
gssapi.h replace: Fix checking for config.h #define in gssapi.h 2018-12-16 21:04:09 +01:00
iconv.h
kerberos.h replace: Use #ifdef instead of #if for config.h definitions 2018-11-28 23:19:21 +01:00
locale.h
network.h replace: make sure we have a SCOPE_DELIMITER define 2016-12-09 16:58:11 +01:00
nis.h lib/replace: Remove #undef TCP_NODELAY 2019-06-18 06:47:05 +00:00
passwd.h replace: Fix includes of unistd.h 2014-09-19 18:11:11 +02:00
readline.h replace: Fix checking for config.h #define in readline.h 2018-12-16 21:04:09 +01:00
README
select.h Add Solaris ports as a tevent backend. 2015-02-15 23:25:07 +01:00
shmem.h
syslog.h
terminal.h
threads.h replace: add checks for atomic_thread_fence(memory_order_seq_cst) and add possible fallbacks 2018-07-24 17:38:26 +02:00
time.h replace: ensure UTIME_NOW and UTIME_OMIT are always available 2019-12-06 00:17:35 +00:00
wait.h lib:replace: Missing semicolon on function definition. 2016-04-02 06:04:13 +02:00
wscript_configure replace: remove some duplicate checks 2018-02-21 14:19:17 +01:00

This directory contains wrappers around logical groups of system
include files. The idea is to avoid #ifdef blocks in the main code,
and instead put all the necessary conditional includes in subsystem
specific header files in this directory.