util: add new helper in_utc_timezone()

As the name suggests it checks whether we are running in an UTC
timezone.
This commit is contained in:
Lennart Poettering 2017-11-20 10:52:20 +01:00
parent 7c123d49fc
commit 9a9a4f10e9
3 changed files with 25 additions and 0 deletions

View File

@ -1457,3 +1457,9 @@ usec_t usec_shift_clock(usec_t x, clockid_t from, clockid_t to) {
/* x lies in the past */
return usec_sub_unsigned(b, usec_sub_unsigned(a, x));
}
bool in_utc_timezone(void) {
tzset();
return timezone == 0 && daylight == 0;
}

View File

@ -156,6 +156,8 @@ struct tm *localtime_or_gmtime_r(const time_t *t, struct tm *tm, bool utc);
unsigned long usec_to_jiffies(usec_t usec);
bool in_utc_timezone(void);
static inline usec_t usec_add(usec_t a, usec_t b) {
usec_t c;

View File

@ -383,6 +383,22 @@ static void test_usec_shift_clock(void) {
}
}
static void test_in_utc_timezone(void) {
assert_se(setenv("TZ", ":UTC", 1) >= 0);
assert_se(in_utc_timezone());
assert_se(streq(tzname[0], "UTC"));
assert_se(streq(tzname[1], "UTC"));
assert_se(timezone == 0);
assert_se(daylight == 0);
assert_se(setenv("TZ", "Europe/Berlin", 1) >= 0);
assert_se(!in_utc_timezone());
assert_se(streq(tzname[0], "CET"));
assert_se(streq(tzname[1], "CEST"));
assert_se(unsetenv("TZ") >= 0);
}
int main(int argc, char *argv[]) {
uintmax_t x;
@ -409,6 +425,7 @@ int main(int argc, char *argv[]) {
test_format_timestamp_utc();
test_dual_timestamp_deserialize();
test_usec_shift_clock();
test_in_utc_timezone();
/* Ensure time_t is signed */
assert_cc((time_t) -1 < (time_t) 1);