diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2020-11-10 12:25:55 +0100 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2020-11-10 15:48:14 +0100 |
commit | 063f9f0da9d3833e677d56933182a3f8a39b6d35 (patch) | |
tree | f58477db814d55bbbd0a32cfdf274d3c1249ee54 | |
parent | sd-event: minor modernization (diff) | |
download | systemd-063f9f0da9d3833e677d56933182a3f8a39b6d35.tar.xz systemd-063f9f0da9d3833e677d56933182a3f8a39b6d35.zip |
basic/env-util: add little helper to call setenv or unsetenv
-rw-r--r-- | src/basic/env-util.c | 12 | ||||
-rw-r--r-- | src/basic/env-util.h | 3 | ||||
-rw-r--r-- | src/shared/pager.c | 7 | ||||
-rw-r--r-- | src/test/test-exec-util.c | 5 | ||||
-rw-r--r-- | src/timedate/timedatectl.c | 8 |
5 files changed, 21 insertions, 14 deletions
diff --git a/src/basic/env-util.c b/src/basic/env-util.c index bf191044c03..a84863ff225 100644 --- a/src/basic/env-util.c +++ b/src/basic/env-util.c @@ -747,3 +747,15 @@ int getenv_bool_secure(const char *p) { return parse_boolean(e); } + +int set_unset_env(const char *name, const char *value, bool overwrite) { + int r; + + if (value) + r = setenv(name, value, overwrite); + else + r = unsetenv(name); + if (r < 0) + return -errno; + return 0; +} diff --git a/src/basic/env-util.h b/src/basic/env-util.h index a37603dbd8d..6684b3350f0 100644 --- a/src/basic/env-util.h +++ b/src/basic/env-util.h @@ -52,3 +52,6 @@ char *strv_env_get(char **x, const char *n) _pure_; int getenv_bool(const char *p); int getenv_bool_secure(const char *p); + +/* Like setenv, but calls unsetenv if value == NULL. */ +int set_unset_env(const char *name, const char *value, bool overwrite); diff --git a/src/shared/pager.c b/src/shared/pager.c index cd8a840e578..f689d9f28f0 100644 --- a/src/shared/pager.c +++ b/src/shared/pager.c @@ -189,12 +189,9 @@ int pager_open(PagerFlags flags) { /* We generally always set variables used by less, even if we end up using a different pager. * They shouldn't hurt in any case, and ideally other pagers would look at them too. */ - if (use_secure_mode) - r = setenv("LESSSECURE", "1", 1); - else - r = unsetenv("LESSSECURE"); + r = set_unset_env("LESSSECURE", use_secure_mode ? "1" : NULL, true); if (r < 0) { - log_error_errno(errno, "Failed to adjust environment variable LESSSECURE: %m"); + log_error_errno(r, "Failed to adjust environment variable LESSSECURE: %m"); _exit(EXIT_FAILURE); } diff --git a/src/test/test-exec-util.c b/src/test/test-exec-util.c index 5da69f7321e..e9e8e210405 100644 --- a/src/test/test-exec-util.c +++ b/src/test/test-exec-util.c @@ -372,10 +372,7 @@ static void test_environment_gathering(void) { assert_se(streq(strv_env_get(env, "PATH"), DEFAULT_PATH ":/no/such/file")); /* reset environ PATH */ - if (old) - (void) setenv("PATH", old, 1); - else - (void) unsetenv("PATH"); + assert_se(set_unset_env("PATH", old, true) == 0); } static void test_error_catching(void) { diff --git a/src/timedate/timedatectl.c b/src/timedate/timedatectl.c index 455c602c30f..abc792a4525 100644 --- a/src/timedate/timedatectl.c +++ b/src/timedate/timedatectl.c @@ -12,6 +12,7 @@ #include "bus-locator.h" #include "bus-map-properties.h" #include "bus-print-properties.h" +#include "env-util.h" #include "format-table.h" #include "in-addr-util.h" #include "main-func.h" @@ -139,12 +140,9 @@ static int print_status_info(const StatusInfo *i) { /* Restore the $TZ */ - if (old_tz) - r = setenv("TZ", old_tz, true); - else - r = unsetenv("TZ"); + r = set_unset_env("TZ", old_tz, true); if (r < 0) - log_warning_errno(errno, "Failed to set TZ environment variable, ignoring: %m"); + log_warning_errno(r, "Failed to set TZ environment variable, ignoring: %m"); else tzset(); |