add extended attributes syscalls
authorRich Felker <dalias@aerifal.cx>
Mon, 23 Jul 2012 20:39:44 +0000 (16:39 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 23 Jul 2012 20:39:44 +0000 (16:39 -0400)
based on patch by orc and Isaac Dunham, with some fixes.

include/sys/xattr.h [new file with mode: 0644]
src/linux/xattr.c [new file with mode: 0644]

diff --git a/include/sys/xattr.h b/include/sys/xattr.h
new file mode 100644 (file)
index 0000000..2801cb8
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef        _SYS_XATTR_H
+#define        _SYS_XATTR_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define __NEED_ssize_t
+#define __NEED_size_t
+#include <bits/alltypes.h>
+
+#define XATTR_CREATE 1
+#define XATTR_REPLACE 2
+
+ssize_t getxattr(const char *, const char *, void *, size_t);
+ssize_t lgetxattr(const char *, const char *, void *, size_t);
+ssize_t fgetxattr(int filedes, const char *, void *, size_t);
+ssize_t listxattr(const char *, char *, size_t);
+ssize_t llistxattr(const char *, char *, size_t);
+ssize_t flistxattr(int filedes, char *, size_t);
+int setxattr(const char *, const char *, const void *, size_t, int);
+int lsetxattr(const char *, const char *, const void *, size_t, int);
+int fsetxattr(int, const char *, const void *, size_t, int);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/linux/xattr.c b/src/linux/xattr.c
new file mode 100644 (file)
index 0000000..a66ab82
--- /dev/null
@@ -0,0 +1,47 @@
+#include <sys/xattr.h>
+#include "syscall.h"
+
+ssize_t getxattr(const char *path, const char *name, void *value, size_t size)
+{
+       return syscall(SYS_getxattr, path, name, value, size);
+}
+
+ssize_t lgetxattr(const char *path, const char *name, void *value, size_t size)
+{
+       return syscall(SYS_lgetxattr, path, name, value, size);
+}
+
+ssize_t fgetxattr(int filedes, const char *name, void *value, size_t size)
+{
+       return syscall(SYS_fgetxattr, filedes, name, value, size);
+}
+
+ssize_t listxattr(const char *path, char *list, size_t size)
+{
+       return syscall(SYS_listxattr, path, list, size);
+}
+
+ssize_t llistxattr(const char *path, char *list, size_t size)
+{
+       return syscall(SYS_llistxattr, path, list, size);
+}
+
+ssize_t flistxattr(int filedes, char *list, size_t size)
+{
+       return syscall(SYS_flistxattr, filedes, list, size);
+}
+
+int setxattr(const char *path, const char *name, const void *value, size_t size, int flags)
+{
+       return syscall(SYS_setxattr, path, name, value, size, flags);
+}
+
+int lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags)
+{
+       return syscall(SYS_lsetxattr, path, name, value, size, flags);
+}
+
+int fsetxattr(int filedes, const char *name, const void *value, size_t size, int flags)
+{
+       return syscall(SYS_fsetxattr, filedes, name, value, size, flags);
+}