Mercurial > hg > octave-nkf > gnulib-hg
changeset 283:63297bb8f1dd
merge with 1.10f
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Tue, 26 Jul 1994 04:06:26 +0000 |
parents | ea96d91a1676 |
children | 2fb85cf2ec1a |
files | lib/mktime.c |
diffstat | 1 files changed, 14 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/mktime.c +++ b/lib/mktime.c @@ -1,5 +1,6 @@ /* Copyright (C) 1993, 1994 Free Software Foundation, Inc. - Contributed by Noel Cragg (noel@cs.oberlin.edu). + Contributed by Noel Cragg (noel@cs.oberlin.edu), with fixes + by Michael E. Calwas (calwas@ttd.teradyne.com). This file is part of the GNU C Library. @@ -226,12 +227,12 @@ while (me->foo < x) \ { \ me->bar--; \ - me->foo = (y - (x - me->foo)); \ + me->foo = (y - (x - me->foo) + 1); \ } \ while (me->foo > y) \ { \ + me->foo = (x + (me->foo - y) - 1); \ me->bar++; \ - me->foo = (x + (me->foo - y)); \ } normalize (tm_sec, 0, 59, tm_min); @@ -240,8 +241,14 @@ /* Do the month first, so day range can be found. */ normalize (tm_mon, 0, 11, tm_year); + + /* Since the day range modifies the month, we should be careful how + we reference the array of month lengths -- it is possible that + the month will go negative, hence the %... */ normalize (tm_mday, 1, - __mon_lengths[__isleap (me->tm_year)][me->tm_mon], + __mon_lengths[__isleap (me->tm_year)][((me->tm_mon < 0) + ? (12 + (me->tm_mon % 12)) + : (me->tm_mon % 12)) ], tm_mon); /* Do the month again, because the day may have pushed it out of range. */ @@ -249,7 +256,9 @@ /* Do the day again, because the month may have changed the range. */ normalize (tm_mday, 1, - __mon_lengths[__isleap (me->tm_year)][me->tm_mon], + __mon_lengths[__isleap (me->tm_year)][((me->tm_mon < 0) + ? (12 + (me->tm_mon % 12)) + : (me->tm_mon % 12)) ], tm_mon); #ifdef DEBUG