summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/common/xattr.c
blob: 6e4e7fa9221900a7ba5dfe38f29c550d59e9432a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/* 
 * Copyright (C) 2004 <solar@gentoo.org>
 * Copyright (C) 2000-2006 Erik Andersen <andersen@uclibc.org>
 *
 * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
 */
/* This file provides the following Extended Attribute system calls to uClibc.
 *
 *	setxattr(), lsetxattr(), fsetxattr(),
 *	getxattr(), lgetxattr(), fgetxattr(),
 *	listxattr(), llistxattr(), flistxattr(),
 *	removexattr(), lremovexattr(), fremovexattr()
 *
 * Dec 2004 - <solar@gentoo.org>
 */

/* Taken from the manpage.
 * On success, a positive number is returned indicating the size of the
 * extended attribute name list. On failure, -1 is returned and errno
 * is set appropriately. If extended attributes are not supported by the
 * filesystem, or are disabled, errno is set to ENOSYS.
 */

#include "syscalls.h"
#include <unistd.h>
#include <sys/xattr.h>

/* sets */
#ifdef __NR_setxattr
_syscall5(int, setxattr, const char *, path, const char *, name,
	const void *, value, size_t, size, int, flags);
#else
int setxattr(__const char *__path, __const char *__name,
	__const void *__value, size_t __size, int __flags)
{
    __set_errno(ENOSYS);
    return -1;
}
#endif

#ifdef __NR_lsetxattr
_syscall5(int, lsetxattr, const char *, path, const char *, name,
	const void *, value, size_t, size, int, flags);
#else
int lsetxattr(__const char *__path, __const char *__name,
	__const void *__value, size_t __size, int __flags)
{
    __set_errno(ENOSYS);
    return -1;
}
#endif

#ifdef __NR_fsetxattr
_syscall5(int, fsetxattr, int, filedes, const char *, name, const void *,
	value, size_t, size, int, flags);
#else
int fsetxattr(int __fd, __const char *__name, __const void *__value,
	size_t __size, int __flags)
{
    __set_errno(ENOSYS);
    return -1;
}
#endif

/* gets */
#ifdef __NR_getxattr
_syscall4(ssize_t, getxattr, const char *, path, const char *, name,
	void *, value, size_t, size);
#else
ssize_t getxattr(__const char *__path, __const char *__name, void *__value,
	size_t __size)
{
    __set_errno(ENOSYS);
    return -1;
}
#endif

#ifdef __NR_lgetxattr
_syscall4(ssize_t, lgetxattr, const char *, path, const char *, name,
	void *, value, size_t, size);
#else
ssize_t lgetxattr(__const char *__path, __const char *__name,
	void *__value, size_t __size)
{
    __set_errno(ENOSYS);
    return -1;
}
#endif

#ifdef __NR_fgetxattr
_syscall4(ssize_t, fgetxattr, int, filedes, const char *, name, void *,
	value, size_t, size);
#else
ssize_t fgetxattr(int __fd, __const char *__name, void *__value,
	size_t __size)
{
    __set_errno(ENOSYS);
    return -1;
}
#endif

/* list */
#ifdef __NR_listxattr
_syscall3(ssize_t, listxattr, const char *, path, char *, list, size_t,
	size);
#else
ssize_t listxattr(__const char *__path, char *__list, size_t __size)
{
    __set_errno(ENOSYS);
    return -1;
}
#endif

#ifdef __NR_llistxattr
_syscall3(ssize_t, llistxattr, const char *, path, char *, list, size_t,
	size);
#else
ssize_t llistxattr(__const char *__path, char *__list, size_t __size)
{
    __set_errno(ENOSYS);
    return -1;
}
#endif

#ifdef __NR_flistxattr
_syscall3(ssize_t, flistxattr, int, filedes, char *, list, size_t, size);
#else
ssize_t flistxattr(int __fd, char *__list, size_t __size)
{
    __set_errno(ENOSYS);
    return -1;
}
#endif

/* remove */
#ifdef __NR_removexattr
_syscall2(int, removexattr, const char *, path, const char *, name);
#else
int removexattr(__const char *__path, __const char *__name)
{
    __set_errno(ENOSYS);
    return -1;
}
#endif

#ifdef __NR_lremovexattr
_syscall2(int, lremovexattr, const char *, path, const char *, name);
#else
int lremovexattr(__const char *__path, __const char *__name)
{
    __set_errno(ENOSYS);
    return -1;
}
#endif

#ifdef __NR_fremovexattr
_syscall2(int, fremovexattr, int, filedes, const char *, name);
#else
int fremovexattr(int __fd, __const char *__name)
{
    __set_errno(ENOSYS);
    return -1;
}
#endif