]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
xattr-util: add trivial getxattr_at_strv() helper
authorLennart Poettering <lennart@poettering.net>
Mon, 31 Mar 2025 12:47:22 +0000 (14:47 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 31 Mar 2025 13:13:28 +0000 (15:13 +0200)
src/basic/xattr-util.c
src/basic/xattr-util.h

index 4e69693e064afa317b1f791a63528004e23389a3..f5b270c3a929e26d03c7e49076cf72ed9882951d 100644 (file)
 #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,
index 8882ebf7749dd99c7c558d4ade510e56f7a33cfd..9132dc2e37ce93109c4b9ddeed1fc6abbf18965c 100644 (file)
@@ -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) {