[tz] [PATCH 1/3] Further removal of attempt to support floating-point time_t.
Paul Eggert
eggert at cs.ucla.edu
Fri Aug 16 19:21:55 UTC 2013
* 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
More information about the tz
mailing list