From 6656986570b3a421aed445fadae00db26c49ba34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= Date: Fri, 23 Jan 2026 21:37:18 +0100 Subject: [PATCH] libredirect: add remaining sys/xattr.h functions that take a path Specifically: getxattr, lgetxattr, setxattr, lsetxattr, removexattr, lremovexattr. The filesystem in the Nix build sandbox doesn't support extended attributes, so I'm unable to add tests. --- pkgs/by-name/li/libredirect/libredirect.c | 60 +++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/pkgs/by-name/li/libredirect/libredirect.c b/pkgs/by-name/li/libredirect/libredirect.c index 29169facf8ed..d0b9ae8b9626 100644 --- a/pkgs/by-name/li/libredirect/libredirect.c +++ b/pkgs/by-name/li/libredirect/libredirect.c @@ -387,6 +387,26 @@ WRAPPER(DIR *, opendir)(const char * path) } WRAPPER_DEF(opendir) +#if !defined(__APPLE__) +WRAPPER(ssize_t, getxattr)(const char * path, const char * name, void * value, size_t size) +{ + ssize_t (*getxattr_real) (const char *, const char *, void *, size_t) = LOOKUP_REAL(getxattr); + char buf[PATH_MAX]; + return getxattr_real(rewrite(path, buf), name, value, size); +} +WRAPPER_DEF(getxattr); +#endif + +#if !defined(__APPLE__) +WRAPPER(ssize_t, lgetxattr)(const char * path, const char * name, void * value, size_t size) +{ + ssize_t (*lgetxattr_real) (const char *, const char *, void *, size_t) = LOOKUP_REAL(lgetxattr); + char buf[PATH_MAX]; + return lgetxattr_real(rewrite(path, buf), name, value, size); +} +WRAPPER_DEF(lgetxattr); +#endif + #if !defined(__APPLE__) WRAPPER(ssize_t, listxattr)(const char * path, char * list, size_t size) { @@ -407,6 +427,46 @@ WRAPPER(ssize_t, llistxattr)(const char * path, char * list, size_t size) WRAPPER_DEF(llistxattr); #endif +#if !defined(__APPLE__) +WRAPPER(int, setxattr)(const char * path, const char * name, const void * value, size_t size, int flags) +{ + int (*setxattr_real) (const char *, const char *, const void *, size_t, int) = LOOKUP_REAL(setxattr); + char buf[PATH_MAX]; + return setxattr_real(rewrite(path, buf), name, value, size, flags); +} +WRAPPER_DEF(setxattr); +#endif + +#if !defined(__APPLE__) +WRAPPER(int, lsetxattr)(const char * path, const char * name, const void * value, size_t size, int flags) +{ + int (*lsetxattr_real) (const char *, const char *, const void *, size_t, int) = LOOKUP_REAL(lsetxattr); + char buf[PATH_MAX]; + return lsetxattr_real(rewrite(path, buf), name, value, size, flags); +} +WRAPPER_DEF(setxattr); +#endif + +#if !defined(__APPLE__) +WRAPPER(int, removexattr)(const char * path, const char * name) +{ + int (*removexattr_real) (const char *, const char *) = LOOKUP_REAL(removexattr); + char buf[PATH_MAX]; + return removexattr_real(rewrite(path, buf), name); +} +WRAPPER_DEF(removexattr); +#endif + +#if !defined(__APPLE__) +WRAPPER(int, lremovexattr)(const char * path, const char * name) +{ + int (*lremovexattr_real) (const char *, const char *) = LOOKUP_REAL(lremovexattr); + char buf[PATH_MAX]; + return lremovexattr_real(rewrite(path, buf), name); +} +WRAPPER_DEF(lremovexattr); +#endif + #define SYSTEM_CMD_MAX 512 static char * replace_substring(char * source, char * buf, char * replace_string, char * start_ptr, char * suffix_ptr) {