chiark / gitweb /
exit cleanly on SIGINT
[elogind.git] / strv.c
diff --git a/strv.c b/strv.c
index ecad6d59806b880e923df900511c26ae662e1c17..faa878c006748c0e0fc21f4c7ea004636224c73f 100644 (file)
--- a/strv.c
+++ b/strv.c
@@ -115,3 +115,33 @@ fail:
         free(a);
         return NULL;
 }
+
+char **strv_merge(char **a, char **b) {
+        char **r, **k;
+
+        if (!a)
+                return strv_copy(b);
+
+        if (!b)
+                return strv_copy(a);
+
+        if (!(r = new(char*, strv_length(a)+strv_length(b)+1)))
+                return NULL;
+
+        for (k = r; *a; k++, a++)
+                if (!(*k = strdup(*a)))
+                        goto fail;
+        for (; *b; k++, b++)
+                if (!(*k = strdup(*b)))
+                        goto fail;
+
+        *k = NULL;
+        return r;
+
+fail:
+        for (k--; k >= r; k--)
+                free(*k);
+
+        return NULL;
+
+}