0
|
1
|
|
2 /*
|
|
3 * Copyright (C) Igor Sysoev
|
|
4 */
|
|
5
|
|
6
|
|
7 #include <ngx_config.h>
|
|
8 #include <ngx_core.h>
|
|
9
|
|
10
|
404
|
11 /*
|
|
12 * FreeBSD does not test /etc/localtime change, however, we can workaround it
|
|
13 * by calling tzset() with TZ and then without TZ to update timezone.
|
|
14 * The trick should work since FreeBSD 2.1.0.
|
|
15 *
|
|
16 * Linux does not test /etc/localtime change in localtime(),
|
|
17 * but may stat("/etc/localtime") several times in every strftime(),
|
|
18 * therefore we use it to update timezone.
|
|
19 *
|
|
20 * Solaris does not test /etc/TIMEZONE change too and no workaround available.
|
|
21 */
|
|
22
|
|
23 void
|
|
24 ngx_timezone_update(void)
|
|
25 {
|
|
26 #if (NGX_FREEBSD)
|
|
27
|
|
28 if (getenv("TZ")) {
|
|
29 return;
|
|
30 }
|
|
31
|
|
32 putenv("TZ=UTC");
|
|
33
|
|
34 tzset();
|
|
35
|
|
36 unsetenv("TZ");
|
|
37
|
|
38 tzset();
|
|
39
|
|
40 #elif (NGX_LINUX)
|
|
41 time_t s;
|
|
42 struct tm *t;
|
|
43 char buf[4];
|
|
44
|
|
45 s = time(0);
|
|
46
|
|
47 t = localtime(&s);
|
|
48
|
|
49 strftime(buf, 4, "%H", t);
|
|
50
|
|
51 #endif
|
|
52 }
|
|
53
|
|
54
|
112
|
55 void
|
|
56 ngx_localtime(time_t s, ngx_tm_t *tm)
|
0
|
57 {
|
18
|
58 #if (NGX_HAVE_LOCALTIME_R)
|
112
|
59 (void) localtime_r(&s, tm);
|
0
|
60
|
|
61 #else
|
|
62 ngx_tm_t *t;
|
|
63
|
112
|
64 t = localtime(&s);
|
0
|
65 *tm = *t;
|
|
66
|
|
67 #endif
|
|
68
|
|
69 tm->ngx_tm_mon++;
|
|
70 tm->ngx_tm_year += 1900;
|
|
71 }
|
58
|
72
|
|
73
|
112
|
74 void
|
|
75 ngx_libc_localtime(time_t s, struct tm *tm)
|
58
|
76 {
|
|
77 #if (NGX_HAVE_LOCALTIME_R)
|
112
|
78 (void) localtime_r(&s, tm);
|
58
|
79
|
|
80 #else
|
|
81 struct tm *t;
|
|
82
|
112
|
83 t = localtime(&s);
|
58
|
84 *tm = *t;
|
|
85
|
|
86 #endif
|
|
87 }
|
|
88
|
|
89
|
112
|
90 void
|
|
91 ngx_libc_gmtime(time_t s, struct tm *tm)
|
58
|
92 {
|
|
93 #if (NGX_HAVE_LOCALTIME_R)
|
112
|
94 (void) gmtime_r(&s, tm);
|
58
|
95
|
|
96 #else
|
|
97 struct tm *t;
|
|
98
|
112
|
99 t = gmtime(&s);
|
58
|
100 *tm = *t;
|
|
101
|
|
102 #endif
|
|
103 }
|