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