diff --git a/src/build/libroot/fs_attr_bsdxattr.h b/src/build/libroot/fs_attr_bsdxattr.h new file mode 100644 index 0000000000..93e91e02e2 --- /dev/null +++ b/src/build/libroot/fs_attr_bsdxattr.h @@ -0,0 +1,58 @@ +/* + * Copyright 2008, Ingo Weinhold, ingo_weinhold@gmx.de. + * Distributed under the terms of the MIT License. + */ +#ifndef FS_ATTR_BSDXATTR_H +#define FS_ATTR_BSDXATTR_H + +/*! Included by fs_attr_untyped.cpp. Interfaces with BSD xattr support. +*/ + + +#include + + +// the namespace all attributes live in +static const char* kAttributeNamespace = "user.haiku."; +static const int kAttributeNamespaceLen = 11; + + +static ssize_t +list_attributes(int fd, const char* path, char* buffer, size_t bufferSize) +{ + if (fd >= 0) + return flistxattr(fd, buffer, bufferSize, 0); + return listxattr(path, buffer, bufferSize, XATTR_NOFOLLOW); +} + + +static ssize_t +get_attribute(int fd, const char* path, const char* attribute, void* buffer, + size_t bufferSize) +{ + if (fd >= 0) + return fgetxattr(fd, attribute, buffer, bufferSize, 0, 0); + return getxattr(path, attribute, buffer, bufferSize, 0, XATTR_NOFOLLOW); +} + + +static int +set_attribute(int fd, const char* path, const char* attribute, + const void* buffer, size_t bufferSize) +{ + if (fd >= 0) + return fsetxattr(fd, attribute, buffer, bufferSize, 0, 0); + return setxattr(path, attribute, buffer, bufferSize, 0, XATTR_NOFOLLOW); +} + + +static int +remove_attribute(int fd, const char* path, const char* attribute) +{ + if (fd >= 0) + return fremovexattr(fd, attribute, 0); + return removexattr(path, attribute, XATTR_NOFOLLOW); +} + + +#endif // FS_ATTR_BSDXATTR_H diff --git a/src/build/libroot/fs_attr_untyped.cpp b/src/build/libroot/fs_attr_untyped.cpp index a0c4b22279..ff2f817573 100644 --- a/src/build/libroot/fs_attr_untyped.cpp +++ b/src/build/libroot/fs_attr_untyped.cpp @@ -43,6 +43,8 @@ # include "fs_attr_xattr.h" #elif defined(HAIKU_HOST_PLATFORM_FREEBSD) # include "fs_attr_extattr.h" +#elif defined(HAIKU_HOST_PLATFORM_DARWIN) +# include "fs_attr_bsdxattr.h" #else # error No attribute support for this host platform! #endif