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.
This commit is contained in:
Bjørn Forsman
2026-01-24 23:14:13 +01:00
parent f8d95d174a
commit 6656986570
+60
View File
@@ -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) {