From b331ec93c042d4656995c2d647b4957548a2b303 Mon Sep 17 00:00:00 2001 From: Peter Wemm Date: Tue, 3 Sep 2002 04:34:10 +0000 Subject: [PATCH] Fix a nasty bug exposed by mktime() when time_t is significantly bigger than 32 bits. It was trying to figure out things like the day of week of when time_t is roughly 2^62 etc. Make a better guess for the starting point for the binary search that works on both 32 and 64 bit types. I have been using this for a while now. --- lib/libc/stdtime/localtime.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/libc/stdtime/localtime.c b/lib/libc/stdtime/localtime.c index 3531aa481b7..f37f3329488 100644 --- a/lib/libc/stdtime/localtime.c +++ b/lib/libc/stdtime/localtime.c @@ -1475,6 +1475,12 @@ int * const okayp; ** (this works whether time_t is signed or unsigned). */ bits = TYPE_BIT(time_t) - 1; + /* + * Limit to 32 bits or the things go crazy + * when it tries to figure out times near 2^62 etc. + */ + if (bits > 31) + bits = 31; /* ** If time_t is signed, then 0 is just above the median, ** assuming two's complement arithmetic.