From: Lennart Poettering Date: Mon, 31 Mar 2025 12:47:22 +0000 (+0200) Subject: xattr-util: add trivial getxattr_at_strv() helper X-Git-Tag: v258-rc1~983^2~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ed024abac6e4acad5a77943721e7622bb1b10b71;p=thirdparty%2Fsystemd.git xattr-util: add trivial getxattr_at_strv() helper --- diff --git a/src/basic/xattr-util.c b/src/basic/xattr-util.c index 4e69693e064..f5b270c3a92 100644 --- a/src/basic/xattr-util.c +++ b/src/basic/xattr-util.c @@ -13,11 +13,13 @@ #include "fd-util.h" #include "macro.h" #include "missing_syscall.h" +#include "nulstr-util.h" #include "parse-util.h" #include "sparse-endian.h" #include "stat-util.h" #include "stdio-util.h" #include "string-util.h" +#include "strv.h" #include "time-util.h" #include "xattr-util.h" @@ -189,6 +191,24 @@ int getxattr_at_bool(int fd, const char *path, const char *name, int at_flags) { return parse_boolean(v); } +int getxattr_at_strv(int fd, const char *path, const char *name, int at_flags, char ***ret_strv) { + int r; + + _cleanup_free_ char *nulstr = NULL; + size_t nulstr_size = 0; + + r = getxattr_at_malloc(fd, path, name, at_flags, &nulstr, &nulstr_size); + if (r < 0) + return r; + + _cleanup_strv_free_ char **l = strv_parse_nulstr(nulstr, nulstr_size); + if (!l) + return -ENOMEM; + + *ret_strv = TAKE_PTR(l); + return 0; +} + static int listxattr_pinned_internal( int fd, const char *path, diff --git a/src/basic/xattr-util.h b/src/basic/xattr-util.h index 8882ebf7749..9132dc2e37c 100644 --- a/src/basic/xattr-util.h +++ b/src/basic/xattr-util.h @@ -20,6 +20,7 @@ static inline int fgetxattr_malloc(int fd, const char *name, char **ret, size_t } int getxattr_at_bool(int fd, const char *path, const char *name, int at_flags); +int getxattr_at_strv(int fd, const char *path, const char *name, int at_flags, char ***ret_strv); int listxattr_at_malloc(int fd, const char *path, int at_flags, char **ret); static inline int listxattr_malloc(const char *path, char **ret) {