Mercurial > hg > nginx-quic
comparison src/core/ngx_times.c @ 323:ba876b26b76d
nginx-0.0.3-2004-04-21-22:54:33 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 21 Apr 2004 18:54:33 +0000 |
parents | ee394e997c77 |
children | 0ab66f4b6c4d |
comparison
equal
deleted
inserted
replaced
322:ab2f8c9a2a45 | 323:ba876b26b76d |
---|---|
6 #if (NGX_THREADS) | 6 #if (NGX_THREADS) |
7 static ngx_mutex_t *ngx_time_mutex; | 7 static ngx_mutex_t *ngx_time_mutex; |
8 #endif | 8 #endif |
9 | 9 |
10 | 10 |
11 time_t ngx_cached_time; | 11 ngx_epoch_msec_t ngx_elapsed_msec; |
12 ngx_epoch_msec_t ngx_elapsed_msec; | 12 ngx_epoch_msec_t ngx_old_elapsed_msec; |
13 ngx_epoch_msec_t ngx_old_elapsed_msec; | 13 ngx_epoch_msec_t ngx_start_msec; |
14 ngx_epoch_msec_t ngx_start_msec; | 14 |
15 | 15 volatile time_t ngx_cached_time; |
16 ngx_tm_t ngx_cached_gmtime; | 16 |
17 | 17 volatile ngx_str_t ngx_cached_err_log_time; |
18 static u_char cached_err_log_time[] = "1970/09/28 12:00:00"; | 18 volatile ngx_str_t ngx_cached_http_time; |
19 ngx_str_t ngx_cached_err_log_time; | 19 volatile ngx_str_t ngx_cached_http_log_time; |
20 | 20 |
21 static u_char cached_http_time[] = "Mon, 28 Sep 1970 06:00:00 GMT"; | 21 static ngx_tm_t ngx_cached_gmtime; |
22 ngx_str_t ngx_cached_http_time; | 22 static ngx_int_t ngx_gmtoff; |
23 | 23 |
24 static u_char cached_http_log_time[] = "28/Sep/1970:12:00:00"; | 24 static u_char cached_err_log_time0[] = "1970/09/28 12:00:00"; |
25 ngx_str_t ngx_cached_http_log_time; | 25 static u_char cached_err_log_time1[] = "1970/09/28 12:00:00"; |
26 | |
27 static u_char cached_http_time0[] = "Mon, 28 Sep 1970 06:00:00 GMT"; | |
28 static u_char cached_http_time1[] = "Mon, 28 Sep 1970 06:00:00 GMT"; | |
29 | |
30 static u_char cached_http_log_time0[] = "28/Sep/1970:12:00:00 +0600"; | |
31 static u_char cached_http_log_time1[] = "28/Sep/1970:12:00:00 +0600"; | |
26 | 32 |
27 | 33 |
28 static char *week[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fir", "Sat" }; | 34 static char *week[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fir", "Sat" }; |
29 static char *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", | 35 static char *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", |
30 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; | 36 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; |
37 ngx_memzero(&ngx_cached_gmtime, sizeof(ngx_tm_t)); | 43 ngx_memzero(&ngx_cached_gmtime, sizeof(ngx_tm_t)); |
38 #ifdef ngx_tm_zone | 44 #ifdef ngx_tm_zone |
39 ngx_cached_gmtime.ngx_tm_zone = "GMT"; | 45 ngx_cached_gmtime.ngx_tm_zone = "GMT"; |
40 #endif | 46 #endif |
41 | 47 |
42 ngx_cached_err_log_time.data = cached_err_log_time; | 48 ngx_cached_err_log_time.len = sizeof(cached_err_log_time0) - 1; |
43 ngx_cached_http_time.data = cached_http_time; | 49 ngx_cached_err_log_time.data = cached_err_log_time0; |
44 ngx_cached_http_log_time.data = cached_http_log_time; | 50 |
51 ngx_cached_http_time.len = sizeof(cached_http_time0) - 1; | |
52 ngx_cached_http_time.data = cached_http_time0; | |
53 | |
54 ngx_cached_http_log_time.len = sizeof(cached_http_log_time0) - 1; | |
55 ngx_cached_http_log_time.data = cached_http_log_time0; | |
56 | |
45 ngx_cached_time = 0; | 57 ngx_cached_time = 0; |
46 | 58 |
47 ngx_gettimeofday(&tv); | 59 ngx_gettimeofday(&tv); |
48 | 60 |
49 ngx_start_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000; | 61 ngx_start_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000; |
50 ngx_old_elapsed_msec = 0; | 62 ngx_old_elapsed_msec = 0; |
51 ngx_elapsed_msec = 0; | 63 ngx_elapsed_msec = 0; |
52 | 64 |
65 #if !(WIN32) | |
66 tzset(); | |
67 #endif | |
68 | |
53 ngx_time_update(tv.tv_sec); | 69 ngx_time_update(tv.tv_sec); |
54 } | 70 } |
55 | 71 |
56 | 72 |
57 #if (NGX_THREADS) | 73 #if (NGX_THREADS) |
68 #endif | 84 #endif |
69 | 85 |
70 | 86 |
71 void ngx_time_update(time_t s) | 87 void ngx_time_update(time_t s) |
72 { | 88 { |
73 ngx_tm_t tm; | 89 char *p; |
90 ngx_tm_t tm; | |
91 #if (WIN32) | |
92 TIME_ZONE_INFORMATION tz; | |
93 #endif | |
74 | 94 |
75 if (ngx_cached_time == s) { | 95 if (ngx_cached_time == s) { |
76 return; | 96 return; |
77 } | 97 } |
78 | 98 |
84 | 104 |
85 ngx_cached_time = s; | 105 ngx_cached_time = s; |
86 | 106 |
87 ngx_gmtime(ngx_cached_time, &ngx_cached_gmtime); | 107 ngx_gmtime(ngx_cached_time, &ngx_cached_gmtime); |
88 | 108 |
89 ngx_cached_http_time.len = ngx_snprintf((char *) ngx_cached_http_time.data, | 109 |
90 sizeof("Mon, 28 Sep 1970 06:00:00 GMT"), | 110 if (ngx_cached_http_time.data == cached_http_time0) { |
91 "%s, %02d %s %4d %02d:%02d:%02d GMT", | 111 p = cached_http_time1; |
92 week[ngx_cached_gmtime.ngx_tm_wday], | 112 } else { |
93 ngx_cached_gmtime.ngx_tm_mday, | 113 p = cached_http_time0; |
94 months[ngx_cached_gmtime.ngx_tm_mon - 1], | 114 } |
95 ngx_cached_gmtime.ngx_tm_year, | 115 |
96 ngx_cached_gmtime.ngx_tm_hour, | 116 ngx_snprintf(p, sizeof("Mon, 28 Sep 1970 06:00:00 GMT"), |
97 ngx_cached_gmtime.ngx_tm_min, | 117 "%s, %02d %s %4d %02d:%02d:%02d GMT", |
98 ngx_cached_gmtime.ngx_tm_sec); | 118 week[ngx_cached_gmtime.ngx_tm_wday], |
119 ngx_cached_gmtime.ngx_tm_mday, | |
120 months[ngx_cached_gmtime.ngx_tm_mon - 1], | |
121 ngx_cached_gmtime.ngx_tm_year, | |
122 ngx_cached_gmtime.ngx_tm_hour, | |
123 ngx_cached_gmtime.ngx_tm_min, | |
124 ngx_cached_gmtime.ngx_tm_sec); | |
125 | |
126 ngx_cached_http_time.data = p; | |
127 | |
128 | |
129 #if (WIN32) | |
130 | |
131 /* | |
132 * we do not use GetLocalTime() because it does not return GMT offset, | |
133 * and our ngx_gmtime() is fast enough | |
134 */ | |
135 | |
136 if (GetTimeZoneInformation(&tz) != TIME_ZONE_ID_INVALID) { | |
137 ngx_gmtoff = - tz.Bias; | |
138 } | |
139 | |
140 ngx_gmtime(ngx_cached_time + ngx_gmtoff * 60, &tm); | |
141 | |
142 #elif (SOLARIS) | |
143 | |
144 ngx_gmtoff = (daylight) ? - altzone / 60: - timezone / 60; | |
145 ngx_gmtime(ngx_cached_time + ngx_gmtoff * 60, &tm); | |
146 | |
147 #elif defined __linux__ | |
148 | |
149 ngx_gmtoff = - timezone / 60 + daylight * 60; | |
150 ngx_gmtime(ngx_cached_time + ngx_gmtoff * 60, &tm); | |
151 | |
152 #else | |
99 | 153 |
100 ngx_localtime(&tm); | 154 ngx_localtime(&tm); |
101 | 155 ngx_gmtoff = tm.ngx_tm_gmtoff / 60; |
102 ngx_cached_err_log_time.len = ngx_snprintf((char *) | 156 |
103 ngx_cached_err_log_time.data, | 157 #endif |
104 sizeof("1970/09/28 12:00:00"), | 158 |
105 "%4d/%02d/%02d %02d:%02d:%02d", | 159 |
106 tm.ngx_tm_year, tm.ngx_tm_mon, | 160 if (ngx_cached_err_log_time.data == cached_err_log_time0) { |
107 tm.ngx_tm_mday, tm.ngx_tm_hour, | 161 p = cached_err_log_time1; |
108 tm.ngx_tm_min, tm.ngx_tm_sec); | 162 } else { |
109 | 163 p = cached_err_log_time0; |
110 ngx_cached_http_log_time.len = ngx_snprintf((char *) | 164 } |
111 ngx_cached_http_log_time.data, | 165 |
112 sizeof("28/Sep/1970:12:00:00"), | 166 ngx_snprintf(p, sizeof("1970/09/28 12:00:00"), |
113 "%02d/%s/%d:%02d:%02d:%02d", | 167 "%4d/%02d/%02d %02d:%02d:%02d", |
114 tm.ngx_tm_mday, | 168 tm.ngx_tm_year, tm.ngx_tm_mon, |
115 months[tm.ngx_tm_mon - 1], | 169 tm.ngx_tm_mday, tm.ngx_tm_hour, |
116 tm.ngx_tm_year, | 170 tm.ngx_tm_min, tm.ngx_tm_sec); |
117 tm.ngx_tm_hour, | 171 |
118 tm.ngx_tm_min, | 172 ngx_cached_err_log_time.data = p; |
119 tm.ngx_tm_sec); | 173 |
174 | |
175 if (ngx_cached_http_log_time.data == cached_http_log_time0) { | |
176 p = cached_http_log_time1; | |
177 } else { | |
178 p = cached_http_log_time0; | |
179 } | |
180 | |
181 ngx_snprintf(p, sizeof("28/Sep/1970:12:00:00 +0600"), | |
182 "%02d/%s/%d:%02d:%02d:%02d %c%02d%02d", | |
183 tm.ngx_tm_mday, months[tm.ngx_tm_mon - 1], | |
184 tm.ngx_tm_year, tm.ngx_tm_hour, | |
185 tm.ngx_tm_min, tm.ngx_tm_sec, | |
186 ngx_gmtoff < 0 ? '-' : '+', | |
187 abs(ngx_gmtoff / 60), abs(ngx_gmtoff % 60)); | |
188 | |
189 ngx_cached_http_log_time.data = p; | |
190 | |
120 | 191 |
121 #if (NGX_THREADS) | 192 #if (NGX_THREADS) |
122 ngx_mutex_unlock(ngx_time_mutex); | 193 ngx_mutex_unlock(ngx_time_mutex); |
123 #endif | 194 #endif |
124 | 195 |