xref: /haiku/src/build/libroot/fs_attr_xattr.h (revision 959ff00ddee8411dabb09211f3bfbd52d87229da)
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