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