summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2020-11-10 12:25:55 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2020-11-10 15:48:14 +0100
commit063f9f0da9d3833e677d56933182a3f8a39b6d35 (patch)
treef58477db814d55bbbd0a32cfdf274d3c1249ee54
parentsd-event: minor modernization (diff)
downloadsystemd-063f9f0da9d3833e677d56933182a3f8a39b6d35.tar.xz
systemd-063f9f0da9d3833e677d56933182a3f8a39b6d35.zip
basic/env-util: add little helper to call setenv or unsetenv
-rw-r--r--src/basic/env-util.c12
-rw-r--r--src/basic/env-util.h3
-rw-r--r--src/shared/pager.c7
-rw-r--r--src/test/test-exec-util.c5
-rw-r--r--src/timedate/timedatectl.c8
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();