From 48c1f7c67e85c9a23f8ae365627b6210426399fb Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 8 Nov 2018 08:26:21 -0800 Subject: [PATCH 3/7] mktime: simplify offset guess [BZ#23789] * time/mktime.c (__mktime_internal): Omit excess precision. --- ChangeLog | 4 ++++ time/mktime.c | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index e92ce16df9..b7008a8972 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2018-11-09 Paul Eggert + 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: diff --git a/time/mktime.c b/time/mktime.c index 106b4eac26..0f905eb8fe 100644 --- a/time/mktime.c +++ b/time/mktime.c @@ -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) { -- 2.19.1