1 /* 2 * Copyright 2008, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef FS_ATTR_XATTR_H 6 #define FS_ATTR_XATTR_H 7 8 /*! Included by fs_attr_untyped.cpp. Interfaces with Linux xattr support. 9 */ 10 11 12 #include <attr/xattr.h> 13 14 15 // the namespace all attributes live in 16 static const char* kAttributeNamespace = "user.haiku."; 17 static const int kAttributeNamespaceLen = 11; 18 19 20 static ssize_t 21 list_attributes(int fd, const char* path, char* buffer, size_t bufferSize) 22 { 23 if (fd >= 0) 24 return flistxattr(fd, buffer, bufferSize); 25 return llistxattr(path, buffer, bufferSize); 26 } 27 28 29 static ssize_t 30 get_attribute(int fd, const char* path, const char* attribute, void* buffer, 31 size_t bufferSize) 32 { 33 if (fd >= 0) 34 return fgetxattr(fd, attribute, buffer, bufferSize); 35 return lgetxattr(path, attribute, buffer, bufferSize); 36 } 37 38 39 static int 40 set_attribute(int fd, const char* path, const char* attribute, 41 const void* buffer, size_t bufferSize) 42 { 43 if (fd >= 0) 44 return fsetxattr(fd, attribute, buffer, bufferSize, 0); 45 return lsetxattr(path, attribute, buffer, bufferSize, 0); 46 } 47 48 49 static int 50 remove_attribute(int fd, const char* path, const char* attribute) 51 { 52 if (fd >= 0) 53 return fremovexattr(fd, attribute); 54 return lremovexattr(path, attribute); 55 } 56 57 58 #endif // FS_ATTR_XATTR_H 59