diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2021-02-15 14:52:39 +0100 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2021-02-16 16:10:14 +0100 |
commit | f08231fe07fe15933c3a2de399ac5deb22cf7901 (patch) | |
tree | f48ffe849579a95df26f4b4c5af02504cf89f25e /src/basic | |
parent | 6f8f8688e15e9e35bfc1f3a8b99974b6eaa99eb3 (diff) | |
download | systemd-f08231fe07fe15933c3a2de399ac5deb22cf7901.tar.gz |
basic/env-util: add strv_env_assign() helper
Diffstat (limited to 'src/basic')
-rw-r--r-- | src/basic/env-util.c | 23 | ||||
-rw-r--r-- | src/basic/env-util.h | 1 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/basic/env-util.c b/src/basic/env-util.c index 5335c6784d..5f2b29d7b5 100644 --- a/src/basic/env-util.c +++ b/src/basic/env-util.c @@ -406,7 +406,30 @@ int strv_env_replace_strdup(char ***l, const char *assignment) { r = strv_env_replace(l, p); if (r < 0) return r; + TAKE_PTR(p); + return r; +} + +int strv_env_assign(char ***l, const char *key, const char *value) { + int r; + if (!env_name_is_valid(key)) + return -EINVAL; + + /* NULL removes assignment, "" creates an empty assignment. */ + + if (!value) { + strv_env_unset(*l, key); + return 0; + } + + char *p = strjoin(key, "=", value); + if (!p) + return -ENOMEM; + + r = strv_env_replace(l, p); + if (r < 0) + return r; TAKE_PTR(p); return r; } diff --git a/src/basic/env-util.h b/src/basic/env-util.h index 922cfe1c44..3f8995bf3d 100644 --- a/src/basic/env-util.h +++ b/src/basic/env-util.h @@ -47,6 +47,7 @@ char **strv_env_unset(char **l, const char *p); /* In place ... */ char **strv_env_unset_many(char **l, ...) _sentinel_; int strv_env_replace(char ***l, char *p); /* In place ... */ int strv_env_replace_strdup(char ***l, const char *assignment); +int strv_env_assign(char ***l, const char *key, const char *value); char *strv_env_get_n(char **l, const char *name, size_t k, unsigned flags) _pure_; char *strv_env_get(char **x, const char *n) _pure_; |