r16005: add support for XATTR's on MacOS
authorStefan Metzmacher <metze@samba.org>
Fri, 2 Jun 2006 14:22:56 +0000 (14:22 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:08:49 +0000 (14:08 -0500)
Thanks to Bjoern Jacke for his help.

metze
(This used to be commit 8f8480e453ced38cbf27d0a1a45843c5eb126016)

source4/ntvfs/posix/config.m4
source4/ntvfs/posix/xattr_system.c

index 8d8b07810cdeac2013d589e3b683e7122175dae3..3ae424a4bf7ead5d7f80a04c11604242c54578b6 100644 (file)
@@ -29,6 +29,23 @@ AC_SEARCH_LIBS_EXT(flistxattr, [attr], XATTR_LIBS)
 AC_CHECK_FUNC_EXT(flistxattr, $XATTR_LIBS)
 SMB_EXT_LIB(XATTR,[${XATTR_LIBS}],[${XATTR_CFLAGS}],[${XATTR_CPPFLAGS}],[${XATTR_LDFLAGS}])
 if test x"$ac_cv_func_ext_flistxattr" = x"yes"; then
+       AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt,
+       [old_LIBS=$LIBS
+        LIBS="$LIBS $XATTRLIBS"
+        AC_TRY_COMPILE([
+               #include <sys/types.h>
+               #if HAVE_ATTR_XATTR_H
+               #include <attr/xattr.h>
+               #elif HAVE_SYS_XATTR_H
+               #include <sys/xattr.h>
+               #endif
+               ],[
+               getxattr(NULL, NULL, NULL, 0, 0, 0);
+               ],smb_attr_cv_xattr_add_opt=yes,smb_attr_cv_xattr_add_opt=no)
+         LIBS=$old_LIBS)])
+       if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
+               AC_DEFINE(XATTR_ADDITIONAL_OPTIONS, 1, [xattr functions have additional options])
+       fi
        AC_DEFINE(HAVE_XATTR_SUPPORT,1,[Whether we have xattr support])
        SMB_ENABLE(XATTR,YES)
 fi
index 757ccefe1197ece33ffe150d108401b773959e13..58edf47bfca40302a994639abb91bd36cb55d5e2 100644 (file)
 #include "includes.h"
 #include "vfs_posix.h"
 
-#if !defined(HAVE_XATTR_SUPPORT)
+#if defined(HAVE_XATTR_SUPPORT) && defined(XATTR_ADDITIONAL_OPTIONS)
+static ssize_t _wrap_fgetxattr(int fd, const char *name, void *value, size_t size)
+{
+       return fgetxattr(fd, name, value, size, 0, 0);
+}
+static ssize_t _wrap_getxattr(const char *path, const char *name, void *value, size_t size)
+{
+       return getxattr(path, name, value, size, 0, 0);
+}
+static ssize_t _wrap_fsetxattr(int fd, const char *name, void *value, size_t size, int flags)
+{
+       return fsetxattr(fd, name, value, size, 0, flags);
+}
+static ssize_t _wrap_setxattr(const char *path, const char *name, void *value, size_t size, int flags)
+{
+       return setxattr(path, name, value, size, 0, flags);
+}
+static ssize_t _wrap_fremovexattr(int fd, const char *name)
+{
+       return fremovexattr(fd, name, 0);
+}
+static ssize_t _wrap_removexattr(const char *path, const char *name)
+{
+       return removexattr(path, name, 0);
+}
+#define fgetxattr      _wrap_fgetxattr
+#define getxattr       _wrap_getxattr
+#define fsetxattr      _wrap_fsetxattr
+#define setxattr       _wrap_setxattr
+#define fremovexattr   _wrap_fremovexattr
+#define removexattr    _wrap_removexattr
+#elif !defined(HAVE_XATTR_SUPPORT)
 static ssize_t _none_fgetxattr(int fd, const char *name, void *value, size_t size)
 {
        errno = ENOTSUP;