summaryrefslogtreecommitdiff
path: root/src/basic
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2021-02-15 14:52:39 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2021-02-16 16:10:14 +0100
commitf08231fe07fe15933c3a2de399ac5deb22cf7901 (patch)
treef48ffe849579a95df26f4b4c5af02504cf89f25e /src/basic
parent6f8f8688e15e9e35bfc1f3a8b99974b6eaa99eb3 (diff)
downloadsystemd-f08231fe07fe15933c3a2de399ac5deb22cf7901.tar.gz
basic/env-util: add strv_env_assign() helper
Diffstat (limited to 'src/basic')
-rw-r--r--src/basic/env-util.c23
-rw-r--r--src/basic/env-util.h1
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_;