* localtime.cc (time2): Add workaround for spring gap problem. Add

explaining comment.
This commit is contained in:
Corinna Vinschen 2009-06-12 15:06:26 +00:00
parent 06391373b0
commit 7ce08eab6c
2 changed files with 27 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2009-06-12 Corinna Vinschen <corinna@vinschen.de>
* localtime.cc (time2): Add workaround for spring gap problem. Add
explaining comment.
2009-06-12 Corinna Vinschen <corinna@vinschen.de> 2009-06-12 Corinna Vinschen <corinna@vinschen.de>
* Makefile.in (SUBLIBS): Add librt.a. * Makefile.in (SUBLIBS): Add librt.a.

View File

@ -1989,7 +1989,28 @@ time2(struct tm *tmp, void (*funcp) P((const time_t*, long, struct tm*)),
** If that fails, try with normalization of seconds. ** If that fails, try with normalization of seconds.
*/ */
t = time2sub(tmp, funcp, offset, okayp, false); t = time2sub(tmp, funcp, offset, okayp, false);
return *okayp ? t : time2sub(tmp, funcp, offset, okayp, true); if (*okayp)
return t;
t = time2sub(tmp, funcp, offset, okayp, true);
if (*okayp)
return t;
/* Workaround for the spring gap problem which results in the
autoconf mktime usability test failing.
What we do here is this: The gap has 3600 seconds. If we
subtract 3600 from the tm_sec value and get a valid result,
then we can simply add 3600 to the return value and are done.
If the result is still not valid, the problem is not the
spring gap and we can give up. */
struct tm tmp2 = *tmp;
tmp2.tm_sec -= 3600;
t = time2sub(&tmp2, funcp, offset, okayp, true);
if (*okayp)
{
if (t + 3600 < t) /* Sanity check */
return WRONG;
return t + 3600;
}
return t;
} }
static time_t static time_t