mktime: simplify offset guess

[BZ#23789]
* time/mktime.c (__mktime_internal): Omit excess precision.
This commit is contained in:
Paul Eggert 2018-11-15 22:59:33 +01:00 committed by Albert ARIBAUD (3ADEV)
parent 32c12f3f7a
commit 6c90d759f6
2 changed files with 7 additions and 3 deletions

View File

@ -1,5 +1,9 @@
2018-11-15 Paul Eggert <eggert@cs.ucla.edu>
mktime: simplify offset guess
[BZ#23789]
* time/mktime.c (__mktime_internal): Omit excess precision.
mktime: new test for mktime failure
[BZ#23789]
Based on a test suggested by Albert Aribaud in:

View File

@ -355,7 +355,7 @@ __mktime_internal (struct tm *tp,
struct tm *(*convert) (const time_t *, struct tm *),
mktime_offset_t *offset)
{
long_int t, gt, t0, t1, t2, dt;
long_int t, gt, t0, t1, t2;
struct tm tm;
/* The maximum number of probes (calls to CONVERT) should be enough
@ -502,8 +502,8 @@ __mktime_internal (struct tm *tp,
/* Set *OFFSET to the low-order bits of T - T0 - NEGATIVE_OFFSET_GUESS.
This is just a heuristic to speed up the next mktime call, and
correctness is unaffected if integer overflow occurs here. */
INT_SUBTRACT_WRAPV (t, t0, &dt);
INT_SUBTRACT_WRAPV (dt, negative_offset_guess, offset);
INT_SUBTRACT_WRAPV (t, t0, offset);
INT_SUBTRACT_WRAPV (*offset, negative_offset_guess, offset);
if (LEAP_SECONDS_POSSIBLE && sec_requested != tm.tm_sec)
{