mirror of
https://github.com/nginx/nginx.git
synced 2024-11-24 04:49:01 +08:00
merge r3208, r3209:
ngx_http_parse_time() fixes: *) use ngx_uint_t instead of int, strange to say this reduce function size by 16 bytes *) ngx_http_parse_time() should support full 32-bit time
This commit is contained in:
parent
af7e533682
commit
82f12f7911
@ -8,13 +8,15 @@
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
static int mday[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
|
||||
static ngx_uint_t mday[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
|
||||
|
||||
time_t
|
||||
ngx_http_parse_time(u_char *value, size_t len)
|
||||
{
|
||||
u_char *p, *end;
|
||||
int day, month, year, hour, min, sec;
|
||||
u_char *p, *end;
|
||||
ngx_int_t month;
|
||||
ngx_uint_t day, year, hour, min, sec;
|
||||
uint64_t time;
|
||||
enum {
|
||||
no = 0,
|
||||
rfc822, /* Tue, 10 Nov 2002 23:50:13 */
|
||||
@ -229,14 +231,6 @@ ngx_http_parse_time(u_char *value, size_t len)
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
#if (NGX_TIME_T_SIZE <= 4)
|
||||
|
||||
if (year >= 2038) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* shift new year to March 1 and start months from 1 (not 0),
|
||||
* it is needed for Gauss' formula
|
||||
@ -249,7 +243,7 @@ ngx_http_parse_time(u_char *value, size_t len)
|
||||
|
||||
/* Gauss' formula for Grigorian days since March 1, 1 BC */
|
||||
|
||||
return (
|
||||
time = (uint64_t) (
|
||||
/* days in years including leap years since March 1, 1 BC */
|
||||
|
||||
365 * year + year / 4 - year / 100 + year / 400
|
||||
@ -268,4 +262,14 @@ ngx_http_parse_time(u_char *value, size_t len)
|
||||
*/
|
||||
|
||||
- 719527 + 31 + 28) * 86400 + hour * 3600 + min * 60 + sec;
|
||||
|
||||
#if (NGX_TIME_T_SIZE <= 4)
|
||||
|
||||
if (time > 0x7fffffff) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
return (time_t) time;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user