mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-10 19:30:10 +00:00
[BZ #469] Imported from gnulib.
* time/mktime.c (__isleap): Remove; all uses replaced by: (leapyear): New function, which avoids overflow by not adding 1900 to year before testing whether it is a leap year.
This commit is contained in:
parent
c60a75408e
commit
7203529423
@ -1,5 +1,10 @@
|
||||
2004-10-22 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
[BZ #469] Imported from gnulib.
|
||||
* time/mktime.c (__isleap): Remove; all uses replaced by:
|
||||
(leapyear): New function, which avoids overflow by not adding
|
||||
1900 to year before testing whether it is a leap year.
|
||||
|
||||
[BZ #472] Imported from gnulib.
|
||||
* time/mktime.c (Local Variables): Remove -DHAVE_TIME_R_POSIX;
|
||||
no longer used.
|
||||
|
@ -75,12 +75,17 @@ verify (right_shift_propagates_sign, -1 >> 1 == -1);
|
||||
#define TM_YEAR_BASE 1900
|
||||
verify (base_year_is_a_multiple_of_100, TM_YEAR_BASE % 100 == 0);
|
||||
|
||||
#ifndef __isleap
|
||||
/* Nonzero if YEAR is a leap year (every 4 years,
|
||||
except every 100th isn't, and every 400th is). */
|
||||
# define __isleap(year) \
|
||||
((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0))
|
||||
#endif
|
||||
/* Return 1 if YEAR + TM_YEAR_BASE is a leap year. */
|
||||
static inline int
|
||||
leapyear (int year)
|
||||
{
|
||||
/* Don't add YEAR to TM_YEAR_BASE, as that might overflow.
|
||||
Also, work even if YEAR is negative. */
|
||||
return
|
||||
((year & 3) == 0
|
||||
&& (year % 100 != 0
|
||||
|| ((year / 100) & 3) == (- (TM_YEAR_BASE / 100) & 3)));
|
||||
}
|
||||
|
||||
/* How many days come before each month (0-12). */
|
||||
#ifndef _LIBC
|
||||
@ -234,7 +239,7 @@ __mktime_internal (struct tm *tp,
|
||||
|
||||
/* Calculate day of year from year, month, and day of month.
|
||||
The result need not be in range. */
|
||||
int yday = ((__mon_yday[__isleap (year + TM_YEAR_BASE)]
|
||||
int yday = ((__mon_yday[leapyear (year)]
|
||||
[mon_remainder + 12 * negative_mon_remainder])
|
||||
+ mday - 1);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user