path: root/ports/linux/xattr/wrapfuncs.in
diff options
authorPeter Seebach <peter.seebach@windriver.com>2014-04-16 13:57:50 -0500
committerPeter Seebach <peter.seebach@windriver.com>2014-04-21 18:12:22 -0500
commitd4c7177bb87aad975852715c6956426b5595bb78 (patch)
tree53c8520e9510f9118a4d855c274cf5a679f25e99 /ports/linux/xattr/wrapfuncs.in
parentf1d474452e24e185c4f657bba700ac6509cbd0cd (diff)
Initial draft xattr support
Initial, incomplete, support for extended attributes. Extended attributes are implemented fairly naively, using a second table in the file database using the primary file table's id as a foreign key. The ON DELETE CASCADE behavior requires sqlite 3.6.19 or later with foreign key and trigger support compiled in. To reduce round-trips, the client does not check for existing attributes, but rather, sends three distinct set messages; OP_SET_XATTR, OP_CREATE_XATTR, OP_REPLACE_XATTR. A SET message always succeeds, a CREATE fails if the attribute already exists, and a REPLACE fails if the attribute does not already exist. The /* flags */ feature of makewrappers is used to correct path names appropriately, so all functions are already working with complete paths, and can always use functions that work on links; if they were supposed to dereference, the path fixup code got that. The xattr support is enabled, for now, conditional on whether getfattr --help succeeds. Not yet implemented: Translation for system.posix_acl_access, which is used by "cp -a" (or "cp --preserve-all") on some systems to try to copy modes. Signed-off-by: Peter Seebach <peter.seebach@windriver.com>
Diffstat (limited to 'ports/linux/xattr/wrapfuncs.in')
1 files changed, 12 insertions, 0 deletions
diff --git a/ports/linux/xattr/wrapfuncs.in b/ports/linux/xattr/wrapfuncs.in
new file mode 100644
index 0000000..edfc788
--- /dev/null
+++ b/ports/linux/xattr/wrapfuncs.in
@@ -0,0 +1,12 @@
+ssize_t getxattr(const char *path, const char *name, void *value, size_t size) /* flags=0 */;
+ssize_t lgetxattr(const char *path, const char *name, void *value, size_t size) /* flags=AT_SYMLINK_NOFOLLOW */;
+ssize_t fgetxattr(int filedes, const char *name, void *value, size_t size);
+int setxattr(const char *path, const char *name, const void *value, size_t size, int flags) /* flags=0 */;
+int lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags) /* flags=AT_SYMLINK_NOFOLLOW */;
+int fsetxattr(int filedes, const char *name, const void *value, size_t size, int flags);
+ssize_t listxattr(const char *path, char *list, size_t size) /* flags=0 */;
+ssize_t llistxattr(const char *path, char *list, size_t size) /* flags=AT_SYMLINK_NOFOLLOW */;
+ssize_t flistxattr(int filedes, char *list, size_t size);
+int removexattr(const char *path, const char *name) /* flags=0 */;
+int lremovexattr(const char *path, const char *name) /* flags=AT_SYMLINK_NOFOLLOW */;
+int fremovexattr(int filedes, const char *name);