Skip to content

Commit

Permalink
[BZ #471] Fix imported from gnulib.
Browse files Browse the repository at this point in the history
	* time/mktime.c (leapyear, ydms_tm_diff): Year is of type
	long int, not int, to avoid problems when tm_year == INT_MAX
	and tm_mon > 12.
	(__mktime_intenral): Compute year using long int arithmetic,
	not int arithmetic, to avoid problems on hosts where time_t
	and long are 64 bits but int is 32.
  • Loading branch information
Roland McGrath committed Oct 22, 2004
1 parent 347a6c2 commit 030d371
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 3 deletions.
8 changes: 8 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
2004-10-22 Paul Eggert <eggert@cs.ucla.edu>

[BZ #471] Fix imported from gnulib.
* time/mktime.c (leapyear, ydms_tm_diff): Year is of type
long int, not int, to avoid problems when tm_year == INT_MAX
and tm_mon > 12.
(__mktime_intenral): Compute year using long int arithmetic,
not int arithmetic, to avoid problems on hosts where time_t
and long are 64 bits but int is 32.

[BZ #468] Import a fix from gnulib.
* time/mktime.c [! DEBUG]: Do not include <string.h>.
It's needed only if DEBUG is nonzero.
Expand Down
7 changes: 4 additions & 3 deletions time/mktime.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ verify (base_year_is_a_multiple_of_100, TM_YEAR_BASE % 100 == 0);

/* Return 1 if YEAR + TM_YEAR_BASE is a leap year. */
static inline int
leapyear (int year)
leapyear (long int year)
{
/* Don't add YEAR to TM_YEAR_BASE, as that might overflow.
Also, work even if YEAR is negative. */
Expand Down Expand Up @@ -119,7 +119,7 @@ const unsigned short int __mon_yday[2][13] =
If TP is null, return a nonzero value.
If overflow occurs, yield the low order bits of the correct answer. */
static time_t
ydhms_tm_diff (int year, int yday, int hour, int min, int sec,
ydhms_tm_diff (long int year, int yday, int hour, int min, int sec,
const struct tm *tp)
{
if (!tp)
Expand Down Expand Up @@ -231,7 +231,8 @@ __mktime_internal (struct tm *tp,
int mon_remainder = mon % 12;
int negative_mon_remainder = mon_remainder < 0;
int mon_years = mon / 12 - negative_mon_remainder;
int year = year_requested + mon_years;
long int lyear_requested = year_requested;
long int year = lyear_requested + mon_years;

/* The other values need not be in range:
the remaining code handles minor overflows correctly,
Expand Down

0 comments on commit 030d371

Please sign in to comment.