* localtime.c (timesub): * zdump.c (my_localtime): Don't worry about time_t being floating-point. * localtime.c (timesub): Avoid undefined behavior on integer overflow when assigning time_t to int. --- localtime.c | 5 +++-- zdump.c | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/localtime.c b/localtime.c index 5312ad9..f58b20a 100644 --- a/localtime.c +++ b/localtime.c @@ -1489,9 +1489,10 @@ timesub(const time_t *const timep, const int_fast32_t offset, register int leapdays; tdelta = tdays / DAYSPERLYEAR; - idelta = tdelta; - if (tdelta - idelta >= 1 || idelta - tdelta >= 1) + if (! ((! TYPE_SIGNED(time_t) || INT_MIN <= tdelta) + && tdelta <= INT_MAX)) return NULL; + idelta = tdelta; if (idelta == 0) idelta = (tdays < 0) ? -1 : 1; newy = y; diff --git a/zdump.c b/zdump.c index 36c1838..fa5f8d8 100644 --- a/zdump.c +++ b/zdump.c @@ -244,7 +244,7 @@ my_localtime(time_t *tp) tm = *tmp; t = mktime(&tm); - if (t - *tp >= 1 || *tp - t >= 1) { + if (t != *tp) { (void) fflush(stdout); (void) fprintf(stderr, "\n%s: ", progname); (void) fprintf(stderr, tformat(), *tp); -- 1.8.1.2