diff --git a/newlib/ChangeLog b/newlib/ChangeLog index 91e1fe243..24d6b1e8d 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,9 @@ +2004-12-08 Alex Mogilnikov + + * libc/time/mktm_r (_mktm_r): Fix overflow calculation for + m_day. + (__tzcalc_limits): Fix reference to month array to be zero-based. + 2004-12-07 Jeff Johnston * libc/sys/linux/sys/unistd.h: Add prototypes for ftruncate, truncate, diff --git a/newlib/libc/time/mktm_r.c b/newlib/libc/time/mktm_r.c index 4fdfb9b7b..0ad568c96 100644 --- a/newlib/libc/time/mktm_r.c +++ b/newlib/libc/time/mktm_r.c @@ -2,6 +2,8 @@ * mktm_r.c * Original Author: Adapted from tzcode maintained by Arthur David Olson. * Modifications: Changed to mktm_r and added __tzcalc_limits - 04/10/02, Jeff Johnston + * Fixed bug in mday computations - 08/12/04, Alex Mogilnikov + * Fixed bug in __tzcalc_limits - 08/12/04, Alex Mogilnikov * * Converts the calendar time pointed to by tim_p into a broken-down time * expressed as local time. Returns a pointer to a structure containing the @@ -149,9 +151,9 @@ _DEFUN (_mktm_r, (tim_p, res, is_gmtime), res->tm_wday = 0; ++res->tm_mday; res->tm_hour -= HOURSPERDAY; - if (res->tm_mday >= ip[res->tm_mon]) + if (res->tm_mday > ip[res->tm_mon]) { - res->tm_mday -= ip[res->tm_mon] - 1; + res->tm_mday -= ip[res->tm_mon]; res->tm_mon += 1; if (res->tm_mon == 12) { @@ -231,7 +233,7 @@ _DEFUN (__tzcalc_limits, (year), wday_diff += DAYSPERWEEK; m_day = (__tzrule[i].n - 1) * DAYSPERWEEK + wday_diff; - while (m_day >= ip[j]) + while (m_day >= ip[j-1]) m_day -= DAYSPERWEEK; days += m_day;