From 58cb36e56b15e14da23a507f337af6bd26503e2f Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Wed, 20 Sep 2023 00:06:21 +0100 Subject: [PATCH] env-util: add helper to replace env block --- src/basic/env-util.c | 19 +++++++++++++++++++ src/basic/env-util.h | 2 ++ 2 files changed, 21 insertions(+) diff --git a/src/basic/env-util.c b/src/basic/env-util.c index 44772f778de..d3bf73385fb 100644 --- a/src/basic/env-util.c +++ b/src/basic/env-util.c @@ -1074,3 +1074,22 @@ int getenv_steal_erase(const char *name, char **ret) { return 1; } + +int set_full_environment(char **env) { + int r; + + clearenv(); + + STRV_FOREACH(e, env) { + _cleanup_free_ char *k = NULL, *v = NULL; + + r = split_pair(*e, "=", &k, &v); + if (r < 0) + return r; + + if (setenv(k, v, /* overwrite= */ true) < 0) + return -errno; + } + + return 0; +} diff --git a/src/basic/env-util.h b/src/basic/env-util.h index ec3ac199efe..f7fb1e90823 100644 --- a/src/basic/env-util.h +++ b/src/basic/env-util.h @@ -77,3 +77,5 @@ int setenv_systemd_exec_pid(bool update_only); int getenv_path_list(const char *name, char ***ret_paths); int getenv_steal_erase(const char *name, char **ret); + +int set_full_environment(char **env); -- 2.47.3