]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
nsflags: namespace_flags_to_strv()
authorIvan Kruglov <mail@ikruglov.com>
Mon, 7 Jul 2025 15:06:58 +0000 (08:06 -0700)
committerIvan Kruglov <mail@ikruglov.com>
Thu, 16 Oct 2025 10:26:39 +0000 (03:26 -0700)
src/shared/nsflags.c
src/shared/nsflags.h

index e14aa0981025530ea55eb462d7dba707fc2bd971..b852221c6757f595b49f3611604ab36a6c5ce9a7 100644 (file)
@@ -5,6 +5,7 @@
 #include "namespace-util.h"
 #include "nsflags.h"
 #include "string-util.h"
+#include "strv.h"
 
 int namespace_flags_from_string(const char *name, unsigned long *ret) {
         unsigned long flags = 0;
@@ -40,19 +41,41 @@ int namespace_flags_from_string(const char *name, unsigned long *ret) {
 }
 
 int namespace_flags_to_string(unsigned long flags, char **ret) {
+        _cleanup_strv_free_ char **l = NULL;
         _cleanup_free_ char *s = NULL;
+        int r;
+
+        assert(ret);
+
+        r = namespace_flags_to_strv(flags, &l);
+        if (r < 0)
+                return r;
+
+        s = strv_join(l, NULL);
+        if (!s)
+                return -ENOMEM;
+
+        *ret = TAKE_PTR(s);
+        return 0;
+}
+
+int namespace_flags_to_strv(unsigned long flags, char ***ret) {
+        _cleanup_strv_free_ char **s = NULL;
         unsigned i;
+        int r;
+
+        assert(ret);
 
         for (i = 0; namespace_info[i].proc_name; i++) {
                 if ((flags & namespace_info[i].clone_flag) != namespace_info[i].clone_flag)
                         continue;
 
-                if (!strextend_with_separator(&s, " ", namespace_info[i].proc_name))
-                        return -ENOMEM;
+                r = strv_extend(&s, namespace_info[i].proc_name);
+                if (r < 0)
+                        return r;
         }
 
         *ret = TAKE_PTR(s);
-
         return 0;
 }
 
index 35bcb6a8c99bcfe7d184abe4e4c651da855dbaeb..eae199d73fa3deb7610bf89a781990f1f821a7fb 100644 (file)
@@ -23,4 +23,5 @@
 
 int namespace_flags_from_string(const char *name, unsigned long *ret);
 int namespace_flags_to_string(unsigned long flags, char **ret);
+int namespace_flags_to_strv(unsigned long flags, char ***ret);
 const char* namespace_single_flag_to_string(unsigned long flag) _const_;