1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-12 09:18:10 +03:00

r16005: add support for XATTR's on MacOS

Thanks to Bjoern Jacke for his help.

metze
(This used to be commit 8f8480e453)
This commit is contained in:
Stefan Metzmacher 2006-06-02 14:22:56 +00:00 committed by Gerald (Jerry) Carter
parent f6a3c29ede
commit 8f553ab4a1
2 changed files with 49 additions and 1 deletions

View File

@ -29,6 +29,23 @@ AC_SEARCH_LIBS_EXT(flistxattr, [attr], XATTR_LIBS)
AC_CHECK_FUNC_EXT(flistxattr, $XATTR_LIBS) AC_CHECK_FUNC_EXT(flistxattr, $XATTR_LIBS)
SMB_EXT_LIB(XATTR,[${XATTR_LIBS}],[${XATTR_CFLAGS}],[${XATTR_CPPFLAGS}],[${XATTR_LDFLAGS}]) SMB_EXT_LIB(XATTR,[${XATTR_LIBS}],[${XATTR_CFLAGS}],[${XATTR_CPPFLAGS}],[${XATTR_LDFLAGS}])
if test x"$ac_cv_func_ext_flistxattr" = x"yes"; then 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]) AC_DEFINE(HAVE_XATTR_SUPPORT,1,[Whether we have xattr support])
SMB_ENABLE(XATTR,YES) SMB_ENABLE(XATTR,YES)
fi fi

View File

@ -23,7 +23,38 @@
#include "includes.h" #include "includes.h"
#include "vfs_posix.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) static ssize_t _none_fgetxattr(int fd, const char *name, void *value, size_t size)
{ {
errno = ENOTSUP; errno = ENOTSUP;