Update and clean Tomato RAF files
[tomato.git] / release / src / router / nginx / src / os / unix / ngx_time.c
blobcc760b2eb01e247a87eda1600359cf7b0c82d680
2 /*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) Nginx, Inc.
5 */
8 #include <ngx_config.h>
9 #include <ngx_core.h>
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.
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.
21 * Solaris does not test /etc/TIMEZONE change too and no workaround available.
24 void
25 ngx_timezone_update(void)
27 #if (NGX_FREEBSD)
29 if (getenv("TZ")) {
30 return;
33 putenv("TZ=UTC");
35 tzset();
37 unsetenv("TZ");
39 tzset();
41 #elif (NGX_LINUX)
42 time_t s;
43 struct tm *t;
44 char buf[4];
46 s = time(0);
48 t = localtime(&s);
50 strftime(buf, 4, "%H", t);
52 #endif
56 void
57 ngx_localtime(time_t s, ngx_tm_t *tm)
59 #if (NGX_HAVE_LOCALTIME_R)
60 (void) localtime_r(&s, tm);
62 #else
63 ngx_tm_t *t;
65 t = localtime(&s);
66 *tm = *t;
68 #endif
70 tm->ngx_tm_mon++;
71 tm->ngx_tm_year += 1900;
75 void
76 ngx_libc_localtime(time_t s, struct tm *tm)
78 #if (NGX_HAVE_LOCALTIME_R)
79 (void) localtime_r(&s, tm);
81 #else
82 struct tm *t;
84 t = localtime(&s);
85 *tm = *t;
87 #endif
91 void
92 ngx_libc_gmtime(time_t s, struct tm *tm)
94 #if (NGX_HAVE_LOCALTIME_R)
95 (void) gmtime_r(&s, tm);
97 #else
98 struct tm *t;
100 t = gmtime(&s);
101 *tm = *t;
103 #endif