]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
basic: Add strv_extend_assignment()
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Tue, 30 Aug 2022 13:21:05 +0000 (15:21 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Sun, 8 Jan 2023 15:31:16 +0000 (16:31 +0100)
src/basic/strv.c
src/basic/strv.h
src/test/test-strv.c

index 74e87046cca9dac00e30a8361a6021acb33f184d..2b7a61d442b7a8e8e23768b6a3580b5329a0650a 100644 (file)
@@ -789,6 +789,22 @@ rollback:
         return -ENOMEM;
 }
 
+int strv_extend_assignment(char ***l, const char *lhs, const char *rhs) {
+        char *j;
+
+        assert(l);
+        assert(lhs);
+
+        if (!rhs) /* value is optional, in which case we suppress the field */
+                return 0;
+
+        j = strjoin(lhs, "=", rhs);
+        if (!j)
+                return -ENOMEM;
+
+        return strv_consume(l, j);
+}
+
 int fputstrv(FILE *f, char * const *l, const char *separator, bool *space) {
         bool b = false;
         int r;
index f82c76589d06a5b99988074d0a85caf874f48435..1f8da85fccd94dcc81fa86ba45164848658c9e1e 100644 (file)
@@ -241,6 +241,8 @@ char** strv_skip(char **l, size_t n);
 
 int strv_extend_n(char ***l, const char *value, size_t n);
 
+int strv_extend_assignment(char ***l, const char *lhs, const char *rhs);
+
 int fputstrv(FILE *f, char * const *l, const char *separator, bool *space);
 
 #define strv_free_and_replace(a, b)             \
index 9208faafa47d22c482090a71d0be038a97e01955..5c03eaa960b54c8df9330544a898d03ae474134c 100644 (file)
@@ -942,4 +942,16 @@ TEST(strv_fnmatch) {
         assert_se(pos == 1);
 }
 
+TEST(strv_extend_join) {
+        _cleanup_strv_free_ char **v = NULL;
+
+        assert_se(strv_extend_assignment(&v, "MESSAGE", "ABC") >= 0);
+        assert_se(strv_extend_assignment(&v, "ABC", "QER") >= 0);
+        assert_se(strv_extend_assignment(&v, "MISSING", NULL) >= 0);
+
+        assert_se(strv_length(v) == 2);
+        assert_se(streq(v[0], "MESSAGE=ABC"));
+        assert_se(streq(v[1], "ABC=QER"));
+}
+
 DEFINE_TEST_MAIN(LOG_INFO);