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;
+}
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);
/* 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);
}
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) {
#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"
/* 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();