aboutsummaryrefslogtreecommitdiff
path: root/time
diff options
context:
space:
mode:
Diffstat (limited to 'time')
-rw-r--r--time/Makefile2
-rw-r--r--time/tst-posixtz.c55
-rw-r--r--time/tzset.c2
3 files changed, 57 insertions, 2 deletions
diff --git a/time/Makefile b/time/Makefile
index 170639d..7620d62 100644
--- a/time/Makefile
+++ b/time/Makefile
@@ -30,7 +30,7 @@ routines := offtime asctime clock ctime ctime_r difftime \
stime dysize timegm ftime \
strptime getdate strfxtime
-tests := test_time clocktest
+tests := test_time clocktest tst-posixtz
include ../Rules
diff --git a/time/tst-posixtz.c b/time/tst-posixtz.c
new file mode 100644
index 0000000..00a1649
--- /dev/null
+++ b/time/tst-posixtz.c
@@ -0,0 +1,55 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+struct
+{
+ time_t when;
+ const char *tz;
+ const char *result;
+} tests[] =
+{
+ { 909312849L, "AEST-10AEDST-11,M10.5.0,M3.5.0",
+ "1998/10/25 21:54:09 dst=1 zone=AEDST" },
+ { 924864849L, "AEST-10AEDST-11,M10.5.0,M3.5.0",
+ "1999/04/23 20:54:09 dst=0 zone=AEST" },
+};
+
+int
+main (void)
+{
+ int result = 0;
+ int cnt;
+
+ for (cnt = 0; cnt < sizeof (tests) / sizeof (tests[0]); ++cnt)
+ {
+ char buf[100];
+ struct tm *tmp;
+
+ printf ("TZ = \"%s\", time = %ld => ", tests[cnt].tz, tests[cnt].when);
+ fflush (stdout);
+
+ setenv ("TZ", tests[cnt].tz, 1);
+
+ tmp = localtime (&tests[cnt].when);
+
+ snprintf (buf, sizeof (buf),
+ "%04d/%02d/%02d %02d:%02d:%02d dst=%d zone=%s",
+ tmp->tm_year + 1900, tmp->tm_mon + 1, tmp->tm_mday,
+ tmp->tm_hour, tmp->tm_min, tmp->tm_sec, tmp->tm_isdst,
+ tzname[tmp->tm_isdst ? 1 : 0]);
+
+ fputs (buf, stdout);
+
+ if (strcmp (buf, tests[cnt].result) == 0)
+ puts (", OK");
+ else
+ {
+ result = 1;
+ puts (", FAIL");
+ }
+ }
+
+ return result;
+}
diff --git a/time/tzset.c b/time/tzset.c
index 6b9f932..92e2208 100644
--- a/time/tzset.c
+++ b/time/tzset.c
@@ -524,7 +524,7 @@ tz_compute (timer, tm)
For the later the daylight saving time ends in the next year.
It is easier to detect this after first computing the time for the
wrong year since now we simply can compare the times to switch. */
- if (tz_rules[0].change < tz_rules[1].change
+ if (tz_rules[0].change > tz_rules[1].change
&& ! compute_change (&tz_rules[1], 1900 + tm->tm_year + 1))
return 0;