1/*
2 * Copyright 2008, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef FS_ATTR_BSDXATTR_H
6#define FS_ATTR_BSDXATTR_H
7
8/*!	Included by fs_attr_untyped.cpp. Interfaces with BSD xattr support.
9*/
10
11
12#include <sys/xattr.h>
13
14
15// the namespace all attributes live in
16static const char* kAttributeNamespace = "user.haiku.";
17static const int kAttributeNamespaceLen = 11;
18
19
20static ssize_t
21list_attributes(int fd, const char* path, char* buffer, size_t bufferSize)
22{
23	if (fd >= 0)
24		return flistxattr(fd, buffer, bufferSize, 0);
25	return listxattr(path, buffer, bufferSize, XATTR_NOFOLLOW);
26}
27
28
29static ssize_t
30get_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, 0, 0);
35	return getxattr(path, attribute, buffer, bufferSize, 0, XATTR_NOFOLLOW);
36}
37
38
39static int
40set_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, 0);
45	return setxattr(path, attribute, buffer, bufferSize, 0, XATTR_NOFOLLOW);
46}
47
48
49static int
50remove_attribute(int fd, const char* path, const char* attribute)
51{
52	if (fd >= 0)
53		return fremovexattr(fd, attribute, 0);
54	return removexattr(path, attribute, XATTR_NOFOLLOW);
55}
56
57
58#endif	// FS_ATTR_BSDXATTR_H
59