]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
env-util: modernize strv_env_set() a bit
authorLennart Poettering <lennart@poettering.net>
Wed, 17 Oct 2018 18:12:35 +0000 (20:12 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 17 Oct 2018 18:51:14 +0000 (20:51 +0200)
src/basic/env-util.c

index 12fcbfd5597e3ff5b3c06540e5747160a797e882..19a50ee8c30f31ac5776e4ab1fb3d73f1ef927b8 100644 (file)
@@ -413,26 +413,31 @@ int strv_env_replace(char ***l, char *p) {
 
 char **strv_env_set(char **x, const char *p) {
 
+        _cleanup_strv_free_ char **ret = NULL;
+        size_t n, m;
         char **k;
-        _cleanup_strv_free_ char **r = NULL;
-        char* m[2] = { (char*) p, NULL };
 
         /* Overrides the env var setting of p, returns a new copy */
 
-        r = new(char*, strv_length(x)+2);
-        if (!r)
+        n = strv_length(x);
+        m = n + 2;
+        if (m < n) /* overflow? */
                 return NULL;
 
-        k = r;
-        if (env_append(r, &k, x) < 0)
+        ret = new(char*, m);
+        if (!ret)
                 return NULL;
 
-        if (env_append(r, &k, m) < 0)
+        *ret = NULL;
+        k = ret;
+
+        if (env_append(ret, &k, x) < 0)
                 return NULL;
 
-        *k = NULL;
+        if (env_append(ret, &k, STRV_MAKE(p)) < 0)
+                return NULL;
 
-        return TAKE_PTR(r);
+        return TAKE_PTR(ret);
 }
 
 char *strv_env_get_n(char **l, const char *name, size_t k, unsigned flags) {