Mercurial > hg > nginx-quic
annotate src/core/ngx_times.c @ 6785:d1d0dd69a419
Upstream: added the ngx_http_upstream_resolved_t.name field.
This fixes inconsistency in what is stored in the "host" field.
Normally it would contain the "host" part of the parsed URL
(e.g., proxy_pass with variables), but for the case of an
implicit upstream specified with literal address it contained
the text representation of the socket address (that is, host
including port for IP).
Now the "host" field always contains the "host" part of the URL,
while the text representation of the socket address is stored
in the newly added "name" field.
The ngx_http_upstream_create_round_robin_peer() function was
modified accordingly in a way to be compatible with the code
that does not know about the new "name" field.
The "stream" code was similarly modified except for not adding
compatibility in ngx_stream_upstream_create_round_robin_peer().
This change is also a prerequisite for the next change.
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Mon, 31 Oct 2016 18:33:33 +0300 |
parents | 40bea39731d7 |
children | 63699a40e2ff |
rev | line source |
---|---|
441
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
433
diff
changeset
|
1 |
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
433
diff
changeset
|
2 /* |
444
42d11f017717
nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents:
441
diff
changeset
|
3 * Copyright (C) Igor Sysoev |
4412 | 4 * Copyright (C) Nginx, Inc. |
441
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
433
diff
changeset
|
5 */ |
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
433
diff
changeset
|
6 |
178
a8ff48d26cca
nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
7 |
a8ff48d26cca
nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
8 #include <ngx_config.h> |
a8ff48d26cca
nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
9 #include <ngx_core.h> |
a8ff48d26cca
nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
10 |
a8ff48d26cca
nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
11 |
370
54f76b0b8dca
nginx-0.0.7-2004-06-27-22:01:57 import
Igor Sysoev <igor@sysoev.ru>
parents:
358
diff
changeset
|
12 /* |
563 | 13 * The time may be updated by signal handler or by several threads. |
14 * The time update operations are rare and require to hold the ngx_time_lock. | |
15 * The time read operations are frequent, so they are lock-free and get time | |
16 * values and strings from the current slot. Thus thread may get the corrupted | |
17 * values only if it is preempted while copying and then it is not scheduled | |
18 * to run more than NGX_TIME_SLOTS seconds. | |
370
54f76b0b8dca
nginx-0.0.7-2004-06-27-22:01:57 import
Igor Sysoev <igor@sysoev.ru>
parents:
358
diff
changeset
|
19 */ |
54f76b0b8dca
nginx-0.0.7-2004-06-27-22:01:57 import
Igor Sysoev <igor@sysoev.ru>
parents:
358
diff
changeset
|
20 |
563 | 21 #define NGX_TIME_SLOTS 64 |
370
54f76b0b8dca
nginx-0.0.7-2004-06-27-22:01:57 import
Igor Sysoev <igor@sysoev.ru>
parents:
358
diff
changeset
|
22 |
932
1b8111df8051
the initial slot is out of array
Igor Sysoev <igor@sysoev.ru>
parents:
891
diff
changeset
|
23 static ngx_uint_t slot; |
563 | 24 static ngx_atomic_t ngx_time_lock; |
370
54f76b0b8dca
nginx-0.0.7-2004-06-27-22:01:57 import
Igor Sysoev <igor@sysoev.ru>
parents:
358
diff
changeset
|
25 |
563 | 26 volatile ngx_msec_t ngx_current_msec; |
27 volatile ngx_time_t *ngx_cached_time; | |
28 volatile ngx_str_t ngx_cached_err_log_time; | |
29 volatile ngx_str_t ngx_cached_http_time; | |
30 volatile ngx_str_t ngx_cached_http_log_time; | |
3873 | 31 volatile ngx_str_t ngx_cached_http_log_iso8601; |
5702
777202558122
Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
4782
diff
changeset
|
32 volatile ngx_str_t ngx_cached_syslog_time; |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
33 |
3475
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
34 #if !(NGX_WIN32) |
3474
d4c4cfdffe30
*) use previously cached GMT offset value to update time from a signal handler
Igor Sysoev <igor@sysoev.ru>
parents:
2220
diff
changeset
|
35 |
d4c4cfdffe30
*) use previously cached GMT offset value to update time from a signal handler
Igor Sysoev <igor@sysoev.ru>
parents:
2220
diff
changeset
|
36 /* |
4572
67653855682e
Fixed spelling in multiline C comments.
Ruslan Ermilov <ru@nginx.com>
parents:
4499
diff
changeset
|
37 * localtime() and localtime_r() are not Async-Signal-Safe functions, therefore, |
3475
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
38 * they must not be called by a signal handler, so we use the cached |
3474
d4c4cfdffe30
*) use previously cached GMT offset value to update time from a signal handler
Igor Sysoev <igor@sysoev.ru>
parents:
2220
diff
changeset
|
39 * GMT offset value. Fortunately the value is changed only two times a year. |
d4c4cfdffe30
*) use previously cached GMT offset value to update time from a signal handler
Igor Sysoev <igor@sysoev.ru>
parents:
2220
diff
changeset
|
40 */ |
d4c4cfdffe30
*) use previously cached GMT offset value to update time from a signal handler
Igor Sysoev <igor@sysoev.ru>
parents:
2220
diff
changeset
|
41 |
d4c4cfdffe30
*) use previously cached GMT offset value to update time from a signal handler
Igor Sysoev <igor@sysoev.ru>
parents:
2220
diff
changeset
|
42 static ngx_int_t cached_gmtoff; |
d4c4cfdffe30
*) use previously cached GMT offset value to update time from a signal handler
Igor Sysoev <igor@sysoev.ru>
parents:
2220
diff
changeset
|
43 #endif |
d4c4cfdffe30
*) use previously cached GMT offset value to update time from a signal handler
Igor Sysoev <igor@sysoev.ru>
parents:
2220
diff
changeset
|
44 |
563 | 45 static ngx_time_t cached_time[NGX_TIME_SLOTS]; |
46 static u_char cached_err_log_time[NGX_TIME_SLOTS] | |
47 [sizeof("1970/09/28 12:00:00")]; | |
48 static u_char cached_http_time[NGX_TIME_SLOTS] | |
49 [sizeof("Mon, 28 Sep 1970 06:00:00 GMT")]; | |
50 static u_char cached_http_log_time[NGX_TIME_SLOTS] | |
51 [sizeof("28/Sep/1970:12:00:00 +0600")]; | |
3873 | 52 static u_char cached_http_log_iso8601[NGX_TIME_SLOTS] |
53 [sizeof("1970-09-28T12:00:00+06:00")]; | |
5702
777202558122
Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
4782
diff
changeset
|
54 static u_char cached_syslog_time[NGX_TIME_SLOTS] |
777202558122
Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
4782
diff
changeset
|
55 [sizeof("Sep 28 12:00:00")]; |
178
a8ff48d26cca
nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
56 |
a8ff48d26cca
nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
57 |
326
8733703a37f3
nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
324
diff
changeset
|
58 static char *week[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
59 static char *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
60 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
61 |
501 | 62 void |
63 ngx_time_init(void) | |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
64 { |
370
54f76b0b8dca
nginx-0.0.7-2004-06-27-22:01:57 import
Igor Sysoev <igor@sysoev.ru>
parents:
358
diff
changeset
|
65 ngx_cached_err_log_time.len = sizeof("1970/09/28 12:00:00") - 1; |
54f76b0b8dca
nginx-0.0.7-2004-06-27-22:01:57 import
Igor Sysoev <igor@sysoev.ru>
parents:
358
diff
changeset
|
66 ngx_cached_http_time.len = sizeof("Mon, 28 Sep 1970 06:00:00 GMT") - 1; |
54f76b0b8dca
nginx-0.0.7-2004-06-27-22:01:57 import
Igor Sysoev <igor@sysoev.ru>
parents:
358
diff
changeset
|
67 ngx_cached_http_log_time.len = sizeof("28/Sep/1970:12:00:00 +0600") - 1; |
3873 | 68 ngx_cached_http_log_iso8601.len = sizeof("1970-09-28T12:00:00+06:00") - 1; |
5702
777202558122
Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
4782
diff
changeset
|
69 ngx_cached_syslog_time.len = sizeof("Sep 28 12:00:00") - 1; |
323
ba876b26b76d
nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
70 |
370
54f76b0b8dca
nginx-0.0.7-2004-06-27-22:01:57 import
Igor Sysoev <igor@sysoev.ru>
parents:
358
diff
changeset
|
71 ngx_cached_time = &cached_time[0]; |
205
4a9a2b1dd6fa
nginx-0.0.1-2003-12-04-17:53:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
72 |
3475
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
73 ngx_time_update(); |
270
7bb9562216ce
nginx-0.0.2-2004-02-25-23:16:15 import
Igor Sysoev <igor@sysoev.ru>
parents:
266
diff
changeset
|
74 } |
266
5238e93961a1
nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
245
diff
changeset
|
75 |
270
7bb9562216ce
nginx-0.0.2-2004-02-25-23:16:15 import
Igor Sysoev <igor@sysoev.ru>
parents:
266
diff
changeset
|
76 |
563 | 77 void |
3475
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
78 ngx_time_update(void) |
270
7bb9562216ce
nginx-0.0.2-2004-02-25-23:16:15 import
Igor Sysoev <igor@sysoev.ru>
parents:
266
diff
changeset
|
79 { |
5702
777202558122
Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
4782
diff
changeset
|
80 u_char *p0, *p1, *p2, *p3, *p4; |
563 | 81 ngx_tm_t tm, gmt; |
3474
d4c4cfdffe30
*) use previously cached GMT offset value to update time from a signal handler
Igor Sysoev <igor@sysoev.ru>
parents:
2220
diff
changeset
|
82 time_t sec; |
d4c4cfdffe30
*) use previously cached GMT offset value to update time from a signal handler
Igor Sysoev <igor@sysoev.ru>
parents:
2220
diff
changeset
|
83 ngx_uint_t msec; |
563 | 84 ngx_time_t *tp; |
85 struct timeval tv; | |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
86 |
563 | 87 if (!ngx_trylock(&ngx_time_lock)) { |
271
e16dfb9b9afa
nginx-0.0.2-2004-02-26-20:10:01 import
Igor Sysoev <igor@sysoev.ru>
parents:
270
diff
changeset
|
88 return; |
266
5238e93961a1
nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
245
diff
changeset
|
89 } |
370
54f76b0b8dca
nginx-0.0.7-2004-06-27-22:01:57 import
Igor Sysoev <igor@sysoev.ru>
parents:
358
diff
changeset
|
90 |
3474
d4c4cfdffe30
*) use previously cached GMT offset value to update time from a signal handler
Igor Sysoev <igor@sysoev.ru>
parents:
2220
diff
changeset
|
91 ngx_gettimeofday(&tv); |
563 | 92 |
3474
d4c4cfdffe30
*) use previously cached GMT offset value to update time from a signal handler
Igor Sysoev <igor@sysoev.ru>
parents:
2220
diff
changeset
|
93 sec = tv.tv_sec; |
d4c4cfdffe30
*) use previously cached GMT offset value to update time from a signal handler
Igor Sysoev <igor@sysoev.ru>
parents:
2220
diff
changeset
|
94 msec = tv.tv_usec / 1000; |
563 | 95 |
96 ngx_current_msec = (ngx_msec_t) sec * 1000 + msec; | |
97 | |
98 tp = &cached_time[slot]; | |
266
5238e93961a1
nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
245
diff
changeset
|
99 |
563 | 100 if (tp->sec == sec) { |
891
8a3ba663be1a
slot number must be incremented once per second only,
Igor Sysoev <igor@sysoev.ru>
parents:
563
diff
changeset
|
101 tp->msec = msec; |
563 | 102 ngx_unlock(&ngx_time_lock); |
103 return; | |
104 } | |
370
54f76b0b8dca
nginx-0.0.7-2004-06-27-22:01:57 import
Igor Sysoev <igor@sysoev.ru>
parents:
358
diff
changeset
|
105 |
1086
a62d30719ea1
fix segfault if nginx was build with -O2 -fomit-frame-pointer,
Igor Sysoev <igor@sysoev.ru>
parents:
1081
diff
changeset
|
106 if (slot == NGX_TIME_SLOTS - 1) { |
891
8a3ba663be1a
slot number must be incremented once per second only,
Igor Sysoev <igor@sysoev.ru>
parents:
563
diff
changeset
|
107 slot = 0; |
8a3ba663be1a
slot number must be incremented once per second only,
Igor Sysoev <igor@sysoev.ru>
parents:
563
diff
changeset
|
108 } else { |
8a3ba663be1a
slot number must be incremented once per second only,
Igor Sysoev <igor@sysoev.ru>
parents:
563
diff
changeset
|
109 slot++; |
8a3ba663be1a
slot number must be incremented once per second only,
Igor Sysoev <igor@sysoev.ru>
parents:
563
diff
changeset
|
110 } |
8a3ba663be1a
slot number must be incremented once per second only,
Igor Sysoev <igor@sysoev.ru>
parents:
563
diff
changeset
|
111 |
8a3ba663be1a
slot number must be incremented once per second only,
Igor Sysoev <igor@sysoev.ru>
parents:
563
diff
changeset
|
112 tp = &cached_time[slot]; |
8a3ba663be1a
slot number must be incremented once per second only,
Igor Sysoev <igor@sysoev.ru>
parents:
563
diff
changeset
|
113 |
563 | 114 tp->sec = sec; |
891
8a3ba663be1a
slot number must be incremented once per second only,
Igor Sysoev <igor@sysoev.ru>
parents:
563
diff
changeset
|
115 tp->msec = msec; |
563 | 116 |
117 ngx_gmtime(sec, &gmt); | |
181
811bdd2af794
nginx-0.0.1-2003-11-12-20:25:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
180
diff
changeset
|
118 |
323
ba876b26b76d
nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
119 |
1081
4cf9d9b644f7
fix segfault if nginx was build with -O2 -fomit-frame-pointer
Igor Sysoev <igor@sysoev.ru>
parents:
932
diff
changeset
|
120 p0 = &cached_http_time[slot][0]; |
323
ba876b26b76d
nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
121 |
563 | 122 (void) ngx_sprintf(p0, "%s, %02d %s %4d %02d:%02d:%02d GMT", |
123 week[gmt.ngx_tm_wday], gmt.ngx_tm_mday, | |
124 months[gmt.ngx_tm_mon - 1], gmt.ngx_tm_year, | |
125 gmt.ngx_tm_hour, gmt.ngx_tm_min, gmt.ngx_tm_sec); | |
323
ba876b26b76d
nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
126 |
469 | 127 #if (NGX_HAVE_GETTIMEZONE) |
358
0a03c921c81d
nginx-0.0.7-2004-06-17-21:18:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
326
diff
changeset
|
128 |
563 | 129 tp->gmtoff = ngx_gettimezone(); |
130 ngx_gmtime(sec + tp->gmtoff * 60, &tm); | |
323
ba876b26b76d
nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
131 |
3475
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
132 #elif (NGX_HAVE_GMTOFF) |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
133 |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
134 ngx_localtime(sec, &tm); |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
135 cached_gmtoff = (ngx_int_t) (tm.ngx_tm_gmtoff / 60); |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
136 tp->gmtoff = cached_gmtoff; |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
137 |
323
ba876b26b76d
nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
138 #else |
178
a8ff48d26cca
nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
139 |
3475
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
140 ngx_localtime(sec, &tm); |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
141 cached_gmtoff = ngx_timezone(tm.ngx_tm_isdst); |
3474
d4c4cfdffe30
*) use previously cached GMT offset value to update time from a signal handler
Igor Sysoev <igor@sysoev.ru>
parents:
2220
diff
changeset
|
142 tp->gmtoff = cached_gmtoff; |
178
a8ff48d26cca
nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
143 |
323
ba876b26b76d
nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
144 #endif |
ba876b26b76d
nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
145 |
ba876b26b76d
nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
146 |
1081
4cf9d9b644f7
fix segfault if nginx was build with -O2 -fomit-frame-pointer
Igor Sysoev <igor@sysoev.ru>
parents:
932
diff
changeset
|
147 p1 = &cached_err_log_time[slot][0]; |
323
ba876b26b76d
nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
148 |
563 | 149 (void) ngx_sprintf(p1, "%4d/%02d/%02d %02d:%02d:%02d", |
517 | 150 tm.ngx_tm_year, tm.ngx_tm_mon, |
151 tm.ngx_tm_mday, tm.ngx_tm_hour, | |
152 tm.ngx_tm_min, tm.ngx_tm_sec); | |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
153 |
323
ba876b26b76d
nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
154 |
1081
4cf9d9b644f7
fix segfault if nginx was build with -O2 -fomit-frame-pointer
Igor Sysoev <igor@sysoev.ru>
parents:
932
diff
changeset
|
155 p2 = &cached_http_log_time[slot][0]; |
323
ba876b26b76d
nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
156 |
6481
40bea39731d7
Fixed format specifiers in ngx_sprintf().
Sergey Kandaurov <pluknet@nginx.com>
parents:
5702
diff
changeset
|
157 (void) ngx_sprintf(p2, "%02d/%s/%d:%02d:%02d:%02d %c%02i%02i", |
517 | 158 tm.ngx_tm_mday, months[tm.ngx_tm_mon - 1], |
159 tm.ngx_tm_year, tm.ngx_tm_hour, | |
160 tm.ngx_tm_min, tm.ngx_tm_sec, | |
563 | 161 tp->gmtoff < 0 ? '-' : '+', |
162 ngx_abs(tp->gmtoff / 60), ngx_abs(tp->gmtoff % 60)); | |
323
ba876b26b76d
nginx-0.0.3-2004-04-21-22:54:33 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
163 |
3873 | 164 p3 = &cached_http_log_iso8601[slot][0]; |
165 | |
6481
40bea39731d7
Fixed format specifiers in ngx_sprintf().
Sergey Kandaurov <pluknet@nginx.com>
parents:
5702
diff
changeset
|
166 (void) ngx_sprintf(p3, "%4d-%02d-%02dT%02d:%02d:%02d%c%02i:%02i", |
3873 | 167 tm.ngx_tm_year, tm.ngx_tm_mon, |
168 tm.ngx_tm_mday, tm.ngx_tm_hour, | |
169 tm.ngx_tm_min, tm.ngx_tm_sec, | |
170 tp->gmtoff < 0 ? '-' : '+', | |
171 ngx_abs(tp->gmtoff / 60), ngx_abs(tp->gmtoff % 60)); | |
172 | |
5702
777202558122
Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
4782
diff
changeset
|
173 p4 = &cached_syslog_time[slot][0]; |
777202558122
Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
4782
diff
changeset
|
174 |
777202558122
Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
4782
diff
changeset
|
175 (void) ngx_sprintf(p4, "%s %2d %02d:%02d:%02d", |
777202558122
Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
4782
diff
changeset
|
176 months[tm.ngx_tm_mon - 1], tm.ngx_tm_mday, |
777202558122
Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
4782
diff
changeset
|
177 tm.ngx_tm_hour, tm.ngx_tm_min, tm.ngx_tm_sec); |
266
5238e93961a1
nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
245
diff
changeset
|
178 |
563 | 179 ngx_memory_barrier(); |
266
5238e93961a1
nginx-0.0.2-2004-02-23-23:57:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
245
diff
changeset
|
180 |
563 | 181 ngx_cached_time = tp; |
182 ngx_cached_http_time.data = p0; | |
183 ngx_cached_err_log_time.data = p1; | |
184 ngx_cached_http_log_time.data = p2; | |
3873 | 185 ngx_cached_http_log_iso8601.data = p3; |
5702
777202558122
Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
4782
diff
changeset
|
186 ngx_cached_syslog_time.data = p4; |
563 | 187 |
188 ngx_unlock(&ngx_time_lock); | |
178
a8ff48d26cca
nginx-0.0.1-2003-11-11-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
189 } |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
190 |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
191 |
3475
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
192 #if !(NGX_WIN32) |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
193 |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
194 void |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
195 ngx_time_sigsafe_update(void) |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
196 { |
5702
777202558122
Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
4782
diff
changeset
|
197 u_char *p, *p2; |
3475
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
198 ngx_tm_t tm; |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
199 time_t sec; |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
200 ngx_time_t *tp; |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
201 struct timeval tv; |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
202 |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
203 if (!ngx_trylock(&ngx_time_lock)) { |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
204 return; |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
205 } |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
206 |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
207 ngx_gettimeofday(&tv); |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
208 |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
209 sec = tv.tv_sec; |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
210 |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
211 tp = &cached_time[slot]; |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
212 |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
213 if (tp->sec == sec) { |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
214 ngx_unlock(&ngx_time_lock); |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
215 return; |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
216 } |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
217 |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
218 if (slot == NGX_TIME_SLOTS - 1) { |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
219 slot = 0; |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
220 } else { |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
221 slot++; |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
222 } |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
223 |
4782
e23892a0c917
Fixed possible use of old cached times if runtime went backwards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4572
diff
changeset
|
224 tp = &cached_time[slot]; |
e23892a0c917
Fixed possible use of old cached times if runtime went backwards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4572
diff
changeset
|
225 |
e23892a0c917
Fixed possible use of old cached times if runtime went backwards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4572
diff
changeset
|
226 tp->sec = 0; |
e23892a0c917
Fixed possible use of old cached times if runtime went backwards.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4572
diff
changeset
|
227 |
3475
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
228 ngx_gmtime(sec + cached_gmtoff * 60, &tm); |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
229 |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
230 p = &cached_err_log_time[slot][0]; |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
231 |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
232 (void) ngx_sprintf(p, "%4d/%02d/%02d %02d:%02d:%02d", |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
233 tm.ngx_tm_year, tm.ngx_tm_mon, |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
234 tm.ngx_tm_mday, tm.ngx_tm_hour, |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
235 tm.ngx_tm_min, tm.ngx_tm_sec); |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
236 |
5702
777202558122
Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
4782
diff
changeset
|
237 p2 = &cached_syslog_time[slot][0]; |
777202558122
Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
4782
diff
changeset
|
238 |
777202558122
Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
4782
diff
changeset
|
239 (void) ngx_sprintf(p2, "%s %2d %02d:%02d:%02d", |
777202558122
Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
4782
diff
changeset
|
240 months[tm.ngx_tm_mon - 1], tm.ngx_tm_mday, |
777202558122
Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
4782
diff
changeset
|
241 tm.ngx_tm_hour, tm.ngx_tm_min, tm.ngx_tm_sec); |
777202558122
Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
4782
diff
changeset
|
242 |
3475
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
243 ngx_memory_barrier(); |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
244 |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
245 ngx_cached_err_log_time.data = p; |
5702
777202558122
Added syslog support for error_log and access_log directives.
Vladimir Homutov <vl@nginx.com>
parents:
4782
diff
changeset
|
246 ngx_cached_syslog_time.data = p2; |
3475
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
247 |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
248 ngx_unlock(&ngx_time_lock); |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
249 } |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
250 |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
251 #endif |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
252 |
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
253 |
501 | 254 u_char * |
255 ngx_http_time(u_char *buf, time_t t) | |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
256 { |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
257 ngx_tm_t tm; |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
258 |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
259 ngx_gmtime(t, &tm); |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
260 |
455 | 261 return ngx_sprintf(buf, "%s, %02d %s %4d %02d:%02d:%02d GMT", |
262 week[tm.ngx_tm_wday], | |
263 tm.ngx_tm_mday, | |
264 months[tm.ngx_tm_mon - 1], | |
265 tm.ngx_tm_year, | |
266 tm.ngx_tm_hour, | |
267 tm.ngx_tm_min, | |
268 tm.ngx_tm_sec); | |
409
8ac40cae79f0
nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
388
diff
changeset
|
269 } |
8ac40cae79f0
nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
388
diff
changeset
|
270 |
8ac40cae79f0
nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
388
diff
changeset
|
271 |
501 | 272 u_char * |
273 ngx_http_cookie_time(u_char *buf, time_t t) | |
409
8ac40cae79f0
nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
388
diff
changeset
|
274 { |
8ac40cae79f0
nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
388
diff
changeset
|
275 ngx_tm_t tm; |
8ac40cae79f0
nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
388
diff
changeset
|
276 |
8ac40cae79f0
nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
388
diff
changeset
|
277 ngx_gmtime(t, &tm); |
8ac40cae79f0
nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
388
diff
changeset
|
278 |
8ac40cae79f0
nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
388
diff
changeset
|
279 /* |
8ac40cae79f0
nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
388
diff
changeset
|
280 * Netscape 3.x does not understand 4-digit years at all and |
8ac40cae79f0
nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
388
diff
changeset
|
281 * 2-digit years more than "37" |
8ac40cae79f0
nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
388
diff
changeset
|
282 */ |
8ac40cae79f0
nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
388
diff
changeset
|
283 |
455 | 284 return ngx_sprintf(buf, |
285 (tm.ngx_tm_year > 2037) ? | |
286 "%s, %02d-%s-%d %02d:%02d:%02d GMT": | |
287 "%s, %02d-%s-%02d %02d:%02d:%02d GMT", | |
288 week[tm.ngx_tm_wday], | |
289 tm.ngx_tm_mday, | |
290 months[tm.ngx_tm_mon - 1], | |
291 (tm.ngx_tm_year > 2037) ? tm.ngx_tm_year: | |
292 tm.ngx_tm_year % 100, | |
293 tm.ngx_tm_hour, | |
294 tm.ngx_tm_min, | |
295 tm.ngx_tm_sec); | |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
296 } |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
297 |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
298 |
501 | 299 void |
300 ngx_gmtime(time_t t, ngx_tm_t *tp) | |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
301 { |
1970
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
302 ngx_int_t yday; |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
303 ngx_uint_t n, sec, min, hour, mday, mon, year, wday, days, leap; |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
304 |
1874
085e536d856d
treat time_t as unsigned time
Igor Sysoev <igor@sysoev.ru>
parents:
1640
diff
changeset
|
305 /* the calculation is valid for positive time_t only */ |
1970
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
306 |
1874
085e536d856d
treat time_t as unsigned time
Igor Sysoev <igor@sysoev.ru>
parents:
1640
diff
changeset
|
307 n = (ngx_uint_t) t; |
085e536d856d
treat time_t as unsigned time
Igor Sysoev <igor@sysoev.ru>
parents:
1640
diff
changeset
|
308 |
085e536d856d
treat time_t as unsigned time
Igor Sysoev <igor@sysoev.ru>
parents:
1640
diff
changeset
|
309 days = n / 86400; |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
310 |
4499
778ef9c3fd2d
Fixed spelling in single-line comments.
Ruslan Ermilov <ru@nginx.com>
parents:
4412
diff
changeset
|
311 /* January 1, 1970 was Thursday */ |
1970
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
312 |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
313 wday = (4 + days) % 7; |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
314 |
1874
085e536d856d
treat time_t as unsigned time
Igor Sysoev <igor@sysoev.ru>
parents:
1640
diff
changeset
|
315 n %= 86400; |
085e536d856d
treat time_t as unsigned time
Igor Sysoev <igor@sysoev.ru>
parents:
1640
diff
changeset
|
316 hour = n / 3600; |
085e536d856d
treat time_t as unsigned time
Igor Sysoev <igor@sysoev.ru>
parents:
1640
diff
changeset
|
317 n %= 3600; |
085e536d856d
treat time_t as unsigned time
Igor Sysoev <igor@sysoev.ru>
parents:
1640
diff
changeset
|
318 min = n / 60; |
085e536d856d
treat time_t as unsigned time
Igor Sysoev <igor@sysoev.ru>
parents:
1640
diff
changeset
|
319 sec = n % 60; |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
320 |
1970
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
321 /* |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
322 * the algorithm based on Gauss' formula, |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
323 * see src/http/ngx_http_parse_time.c |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
324 */ |
208
0b67be7d4489
nginx-0.0.1-2003-12-08-23:48:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
207
diff
changeset
|
325 |
1970
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
326 /* days since March 1, 1 BC */ |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
327 days = days - (31 + 28) + 719527; |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
328 |
1970
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
329 /* |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
330 * The "days" should be adjusted to 1 only, however, some March 1st's go |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
331 * to previous year, so we adjust them to 2. This causes also shift of the |
4572
67653855682e
Fixed spelling in multiline C comments.
Ruslan Ermilov <ru@nginx.com>
parents:
4499
diff
changeset
|
332 * last February days to next year, but we catch the case when "yday" |
1970
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
333 * becomes negative. |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
334 */ |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
335 |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
336 year = (days + 2) * 400 / (365 * 400 + 100 - 4 + 1); |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
337 |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
338 yday = days - (365 * year + year / 4 - year / 100 + year / 400); |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
339 |
1970
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
340 if (yday < 0) { |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
341 leap = (year % 4 == 0) && (year % 100 || (year % 400 == 0)); |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
342 yday = 365 + leap + yday; |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
343 year--; |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
344 } |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
345 |
1970
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
346 /* |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
347 * The empirical formula that maps "yday" to month. |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
348 * There are at least 10 variants, some of them are: |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
349 * mon = (yday + 31) * 15 / 459 |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
350 * mon = (yday + 31) * 17 / 520 |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
351 * mon = (yday + 31) * 20 / 612 |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
352 */ |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
353 |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
354 mon = (yday + 31) * 10 / 306; |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
355 |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
356 /* the Gauss' formula that evaluates days before the month */ |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
357 |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
358 mday = yday - (367 * mon / 12 - 30) + 1; |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
359 |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
360 if (yday >= 306) { |
441
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
433
diff
changeset
|
361 |
1970
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
362 year++; |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
363 mon -= 10; |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
364 |
297
ee394e997c77
nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents:
290
diff
changeset
|
365 /* |
324
0ab66f4b6c4d
nginx-0.0.3-2004-04-22-00:13:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
323
diff
changeset
|
366 * there is no "yday" in Win32 SYSTEMTIME |
297
ee394e997c77
nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents:
290
diff
changeset
|
367 * |
ee394e997c77
nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents:
290
diff
changeset
|
368 * yday -= 306; |
ee394e997c77
nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents:
290
diff
changeset
|
369 */ |
ee394e997c77
nginx-0.0.3-2004-03-29-21:43:58 import
Igor Sysoev <igor@sysoev.ru>
parents:
290
diff
changeset
|
370 |
1970
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
371 } else { |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
372 |
1970
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
373 mon += 2; |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
374 |
1970
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
375 /* |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
376 * there is no "yday" in Win32 SYSTEMTIME |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
377 * |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
378 * yday += 31 + 28 + leap; |
5bb2c374cab2
use more straightforward ngx_gmtime() implementation
Igor Sysoev <igor@sysoev.ru>
parents:
1874
diff
changeset
|
379 */ |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
380 } |
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
381 |
290
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
271
diff
changeset
|
382 tp->ngx_tm_sec = (ngx_tm_sec_t) sec; |
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
271
diff
changeset
|
383 tp->ngx_tm_min = (ngx_tm_min_t) min; |
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
271
diff
changeset
|
384 tp->ngx_tm_hour = (ngx_tm_hour_t) hour; |
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
271
diff
changeset
|
385 tp->ngx_tm_mday = (ngx_tm_mday_t) mday; |
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
271
diff
changeset
|
386 tp->ngx_tm_mon = (ngx_tm_mon_t) mon; |
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
271
diff
changeset
|
387 tp->ngx_tm_year = (ngx_tm_year_t) year; |
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
271
diff
changeset
|
388 tp->ngx_tm_wday = (ngx_tm_wday_t) wday; |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
181
diff
changeset
|
389 } |
2162 | 390 |
391 | |
392 time_t | |
393 ngx_next_time(time_t when) | |
394 { | |
395 time_t now, next; | |
396 struct tm tm; | |
397 | |
398 now = ngx_time(); | |
399 | |
400 ngx_libc_localtime(now, &tm); | |
401 | |
402 tm.tm_hour = (int) (when / 3600); | |
403 when %= 3600; | |
404 tm.tm_min = (int) (when / 60); | |
405 tm.tm_sec = (int) (when % 60); | |
406 | |
407 next = mktime(&tm); | |
408 | |
409 if (next == -1) { | |
410 return -1; | |
411 } | |
412 | |
413 if (next - now > 0) { | |
414 return next; | |
415 } | |
416 | |
417 tm.tm_mday++; | |
418 | |
419 /* mktime() should normalize a date (Jan 32, etc) */ | |
420 | |
421 next = mktime(&tm); | |
422 | |
423 if (next != -1) { | |
424 return next; | |
425 } | |
426 | |
427 return -1; | |
428 } |