util: add new helper in_utc_timezone()
authorLennart Poettering <lennart@poettering.net>
Mon, 20 Nov 2017 09:52:20 +0000 (10:52 +0100)
committerLennart Poettering <lennart@poettering.net>
Mon, 20 Nov 2017 09:53:26 +0000 (10:53 +0100)
As the name suggests it checks whether we are running in an UTC
timezone.

src/basic/time-util.c
src/basic/time-util.h
src/test/test-time-util.c

index 6bf3c8d..f5af328 100644 (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;
+}
index f600bc3..dc4a159 100644 (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;
 
index e639ded..ebf85fc 100644 (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);