1 | #include <stdlib.h> |
2 | #include <time.h> |
3 | #include <string.h> |
4 | #include <stdio.h> |
5 | |
6 | struct { |
7 | const char * env; |
8 | time_t expected; |
9 | } tests[] = { |
10 | {"MST" , 832935315}, |
11 | {"" , 832910115}, |
12 | {":UTC" , 832910115}, |
13 | {"UTC" , 832910115}, |
14 | {"UTC0" , 832910115} |
15 | }; |
16 | |
17 | |
18 | int |
19 | main (int argc, char ** argv) |
20 | { |
21 | int errors = 0; |
22 | struct tm tm; |
23 | time_t t; |
24 | unsigned int i; |
25 | |
26 | memset (s: &tm, c: 0, n: sizeof (tm)); |
27 | tm.tm_isdst = 0; |
28 | tm.tm_year = 96; /* years since 1900 */ |
29 | tm.tm_mon = 4; |
30 | tm.tm_mday = 24; |
31 | tm.tm_hour = 3; |
32 | tm.tm_min = 55; |
33 | tm.tm_sec = 15; |
34 | |
35 | for (i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i) |
36 | { |
37 | setenv (name: "TZ" , value: tests[i].env, replace: 1); |
38 | t = mktime (tp: &tm); |
39 | if (t != tests[i].expected) |
40 | { |
41 | printf (format: "%s: flunked test %u (expected %lu, got %lu)\n" , |
42 | argv[0], i, (long) tests[i].expected, (long) t); |
43 | ++errors; |
44 | } |
45 | } |
46 | if (errors == 0) |
47 | { |
48 | puts (s: "No errors." ); |
49 | return EXIT_SUCCESS; |
50 | } |
51 | else |
52 | { |
53 | printf (format: "%d errors.\n" , errors); |
54 | return EXIT_FAILURE; |
55 | } |
56 | } |
57 | |