]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
basic/env-util: add little helper to call setenv or unsetenv
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 10 Nov 2020 11:25:55 +0000 (12:25 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 10 Nov 2020 14:48:14 +0000 (15:48 +0100)
src/basic/env-util.c
src/basic/env-util.h
src/shared/pager.c
src/test/test-exec-util.c
src/timedate/timedatectl.c

index bf191044c033252fb192f9a68607a6c188408ff7..a84863ff225b31d16128a08c3540ee697190825b 100644 (file)
@@ -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;
+}
index a37603dbd8d67ee68639088507e941a165efd464..6684b3350f09b78839444fd7b2aa964f6902ef60 100644 (file)
@@ -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);
index cd8a840e578d1ebbcdd96dcbf149e7c6926abda6..f689d9f28f0f6f287641629ac361eecab1ffa6fb 100644 (file)
@@ -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);
                 }
 
index 5da69f7321eded8bbcf5534b617cf15595ba7afe..e9e8e21040527e903b427438f23eb7cb5bb67c9e 100644 (file)
@@ -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) {
index 455c602c30f287a7d8c2754d5c18f03e8b75657d..abc792a4525fc05f05516c0afff07bd5a2cf443f 100644 (file)
@@ -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();