From: Lennart Poettering Date: Wed, 17 Oct 2018 18:12:35 +0000 (+0200) Subject: env-util: modernize strv_env_set() a bit X-Git-Tag: v240~511^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fcbb657460ffbb1ec31bb38b7350d1415015012a;p=thirdparty%2Fsystemd.git env-util: modernize strv_env_set() a bit --- diff --git a/src/basic/env-util.c b/src/basic/env-util.c index 12fcbfd5597..19a50ee8c30 100644 --- a/src/basic/env-util.c +++ b/src/basic/env-util.c @@ -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) {