|
@@ -303,6 +303,7 @@ typedef long off_t;
|
|
#define funlockfile(x) (LeaveCriticalSection(&global_log_file_lock))
|
|
#define funlockfile(x) (LeaveCriticalSection(&global_log_file_lock))
|
|
#define sleep(x) (Sleep((x)*1000))
|
|
#define sleep(x) (Sleep((x)*1000))
|
|
#define rmdir(x) (_rmdir(x))
|
|
#define rmdir(x) (_rmdir(x))
|
|
|
|
+#define timegm(x) (_mkgmtime(x))
|
|
|
|
|
|
#if !defined(fileno)
|
|
#if !defined(fileno)
|
|
#define fileno(x) (_fileno(x))
|
|
#define fileno(x) (_fileno(x))
|
|
@@ -4689,22 +4690,14 @@ get_month_index(const char *s)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-static int
|
|
|
|
-num_leap_years(int year)
|
|
|
|
-{
|
|
|
|
- return year / 4 - year / 100 + year / 400;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-
|
|
|
|
/* Parse UTC date-time string, and return the corresponding time_t value. */
|
|
/* Parse UTC date-time string, and return the corresponding time_t value. */
|
|
static time_t
|
|
static time_t
|
|
parse_date_string(const char *datetime)
|
|
parse_date_string(const char *datetime)
|
|
{
|
|
{
|
|
- static const unsigned short days_before_month[] = {
|
|
|
|
- 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
|
|
|
|
char month_str[32] = {0};
|
|
char month_str[32] = {0};
|
|
- int second, minute, hour, day, month, year, leap_days, days;
|
|
|
|
|
|
+ int second, minute, hour, day, month, year;
|
|
time_t result = (time_t)0;
|
|
time_t result = (time_t)0;
|
|
|
|
+ struct tm tm;
|
|
|
|
|
|
if ((sscanf(datetime,
|
|
if ((sscanf(datetime,
|
|
"%d/%3s/%d %d:%d:%d",
|
|
"%d/%3s/%d %d:%d:%d",
|
|
@@ -4738,51 +4731,14 @@ parse_date_string(const char *datetime)
|
|
&second) == 6)) {
|
|
&second) == 6)) {
|
|
month = get_month_index(month_str);
|
|
month = get_month_index(month_str);
|
|
if ((month >= 0) && (year >= 1970)) {
|
|
if ((month >= 0) && (year >= 1970)) {
|
|
-
|
|
|
|
- /* alternative code (#250) */
|
|
|
|
- time_t alt_result;
|
|
|
|
- struct tm tm;
|
|
|
|
memset(&tm, 0, sizeof(tm));
|
|
memset(&tm, 0, sizeof(tm));
|
|
-
|
|
|
|
tm.tm_year = year - 1900;
|
|
tm.tm_year = year - 1900;
|
|
tm.tm_mon = month;
|
|
tm.tm_mon = month;
|
|
tm.tm_mday = day;
|
|
tm.tm_mday = day;
|
|
tm.tm_hour = hour;
|
|
tm.tm_hour = hour;
|
|
tm.tm_min = minute;
|
|
tm.tm_min = minute;
|
|
tm.tm_sec = second;
|
|
tm.tm_sec = second;
|
|
- alt_result = mktime(&tm);
|
|
|
|
- if (alt_result > 0) {
|
|
|
|
- struct tm *lt = gmtime(&alt_result);
|
|
|
|
- signed int delta_mon =
|
|
|
|
- (lt->tm_mon - tm.tm_mon) + 12 * (lt->tm_year - tm.tm_year);
|
|
|
|
- time_t delta;
|
|
|
|
-
|
|
|
|
- if (delta_mon != 0) {
|
|
|
|
- /* No need to consider different length of months */
|
|
|
|
- delta = (lt->tm_sec - tm.tm_sec)
|
|
|
|
- + 60 * (lt->tm_min - tm.tm_min)
|
|
|
|
- + 60 * 60 * (lt->tm_hour - tm.tm_hour)
|
|
|
|
- + 24 * 60 * 60 * (lt->tm_mday - tm.tm_mday);
|
|
|
|
- } else {
|
|
|
|
- /* Get clock time and add or subtract a day */
|
|
|
|
- delta = (lt->tm_sec - tm.tm_sec)
|
|
|
|
- + 60 * (lt->tm_min - tm.tm_min)
|
|
|
|
- + 60 * 60 * (lt->tm_hour - tm.tm_hour)
|
|
|
|
- + (delta_mon * 24 * 60 * 60);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- alt_result -= delta;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /* original code */
|
|
|
|
- leap_days = num_leap_years(year) - num_leap_years(1970);
|
|
|
|
- year -= 1970;
|
|
|
|
- days =
|
|
|
|
- year * 365 + days_before_month[month] + (day - 1) + leap_days;
|
|
|
|
- result = (time_t)days * 24 * 3600 + (time_t)hour * 3600
|
|
|
|
- + minute * 60 + second;
|
|
|
|
-
|
|
|
|
- /* TODO: fix original code or use alternate code - see #250 */
|
|
|
|
|
|
+ result = timegm(&tm);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|