diff --git a/src/basic/time-util.c b/src/basic/time-util.c index fb54ba276c1..e54c829623e 100644 --- a/src/basic/time-util.c +++ b/src/basic/time-util.c @@ -1022,7 +1022,7 @@ int parse_timestamp(const char *t, usec_t *ret) { if (timezone_is_valid(tz, LOG_DEBUG)) { SAVE_TIMEZONE; - if (setenv("TZ", strjoina(":", tz), /* overwrite = */ true) < 0) + if (setenv("TZ", tz, /* overwrite = */ true) < 0) return negative_errno(); return parse_timestamp_impl(t, max_len, /* utc = */ false, /* isdst = */ -1, /* gmtoff = */ 0, ret); diff --git a/src/shared/calendarspec.c b/src/shared/calendarspec.c index b15f9290367..0e12e55a977 100644 --- a/src/shared/calendarspec.c +++ b/src/shared/calendarspec.c @@ -1436,10 +1436,7 @@ int calendar_spec_next_usec(const CalendarSpec *spec, usec_t usec, usec_t *ret_n SAVE_TIMEZONE; - /* tzset(3) says $TZ should be prefixed with ":" if we reference timezone files */ - const char *colon_tz = strjoina(":", spec->timezone); - - r = RET_NERRNO(setenv("TZ", colon_tz, 1)); + r = RET_NERRNO(setenv("TZ", spec->timezone, /* overwrite = */ true)); if (r < 0) return r; diff --git a/src/test/test-time-util.c b/src/test/test-time-util.c index 7569f89ca0d..7bcf0ae7ee3 100644 --- a/src/test/test-time-util.c +++ b/src/test/test-time-util.c @@ -13,13 +13,7 @@ #define TRIAL 100u static void set_timezone(const char *tz) { - if (!tz) - ASSERT_OK_ERRNO(unsetenv("TZ")); - if (isempty(tz)) - ASSERT_OK_ERRNO(setenv("TZ", tz, /* overwrite = */ true)); - else - ASSERT_OK_ERRNO(setenv("TZ", strjoina(":", tz), /* overwrite = */ true)); - + ASSERT_OK(set_unset_env("TZ", tz, /* overwrite = */ true)); tzset(); log_info("TZ=%s, tzname[0]=%s, tzname[1]=%s", strna(getenv("TZ")), strempty(tzname[0]), strempty(tzname[1])); } @@ -421,7 +415,7 @@ static void test_format_timestamp_impl(usec_t x) { * timezone may provide time shifted 1 hour from the original. See * https://github.com/systemd/systemd/issues/28472 and https://github.com/systemd/systemd/pull/35471 */ bool ignore = - streq_ptr(getenv("TZ"), ":Africa/Windhoek") && + streq_ptr(getenv("TZ"), "Africa/Windhoek") && (x_sec > y_sec ? x_sec - y_sec : y_sec - x_sec) == 3600; log_full(ignore ? LOG_WARNING : LOG_ERR, @@ -1113,14 +1107,14 @@ TEST(usec_shift_clock) { TEST(in_utc_timezone) { SAVE_TIMEZONE; - assert_se(setenv("TZ", ":UTC", 1) >= 0); + assert_se(setenv("TZ", "UTC", 1) >= 0); assert_se(in_utc_timezone()); ASSERT_STREQ(tzname[0], "UTC"); ASSERT_STREQ(tzname[1], "UTC"); assert_se(timezone == 0); assert_se(daylight == 0); - assert_se(setenv("TZ", ":Europe/Berlin", 1) >= 0); + assert_se(setenv("TZ", "Europe/Berlin", 1) >= 0); assert_se(!in_utc_timezone()); ASSERT_STREQ(tzname[0], "CET"); ASSERT_STREQ(tzname[1], "CEST"); diff --git a/src/timedate/timedatectl.c b/src/timedate/timedatectl.c index f3a8046bede..0e8e705a500 100644 --- a/src/timedate/timedatectl.c +++ b/src/timedate/timedatectl.c @@ -58,7 +58,6 @@ typedef struct StatusInfo { static int print_status_info(const StatusInfo *i) { _cleanup_(table_unrefp) Table *table = NULL; - const char *tz_colon; char a[LINE_MAX]; TableCell *cell; struct tm tm; @@ -82,8 +81,7 @@ static int print_status_info(const StatusInfo *i) { SAVE_TIMEZONE; /* Set the new $TZ */ - tz_colon = strjoina(":", isempty(i->timezone) ? "UTC" : i->timezone); - if (setenv("TZ", tz_colon, true) < 0) + if (setenv("TZ", isempty(i->timezone) ? "UTC" : i->timezone, /* overwrite = */ true) < 0) log_warning_errno(errno, "Failed to set TZ environment variable, ignoring: %m"); else tzset();