]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
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 6bf3c8db1d7ece628082b0268ff81b129f7d7f32..f5af3281a100b9d6f66cab5335695fe8728de681 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 f600bc3cbb9679ac8d8a9dfddda146923d2d8013..dc4a15931036a2f785e929e0a5564919ab53a7ba 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 e639ded48cab20a05a5d33c4ad61742b4bd964cf..ebf85fcc7cb46236729ac38afc58c66b3466fa07 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);