[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] time_rz: fix issues with mktime_z failures
From: |
Paul Eggert |
Subject: |
[PATCH] time_rz: fix issues with mktime_z failures |
Date: |
Sun, 16 Aug 2020 11:56:31 -0700 |
* lib/time_rz.c (mktime_z): Do not update *TM if revert_tz fails.
Use a cheaper tm_yday test for failed mktime.
---
ChangeLog | 6 ++++++
lib/time_rz.c | 26 +++++++++++++++++---------
2 files changed, 23 insertions(+), 9 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 0810c1106..2e4651751 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2020-08-16 Paul Eggert <eggert@cs.ucla.edu>
+
+ time_rz: fix issues with mktime_z failures
+ * lib/time_rz.c (mktime_z): Do not update *TM if revert_tz fails.
+ Use a cheaper tm_yday test for failed mktime.
+
2020-08-16 Bruno Haible <bruno@clisp.org>
intprops test: Strengthen on clang.
diff --git a/lib/time_rz.c b/lib/time_rz.c
index 0a8aac999..8ed3c4443 100644
--- a/lib/time_rz.c
+++ b/lib/time_rz.c
@@ -327,17 +327,25 @@ mktime_z (timezone_t tz, struct tm *tm)
timezone_t old_tz = set_tz (tz);
if (old_tz)
{
- time_t t = mktime (tm);
-#if HAVE_TM_ZONE || HAVE_TZNAME
- time_t badtime = -1;
struct tm tm_1;
- if ((t != badtime
- || (localtime_r (&t, &tm_1) && equal_tm (tm, &tm_1)))
- && !save_abbr (tz, tm))
- t = badtime;
+ tm_1.tm_sec = tm->tm_sec;
+ tm_1.tm_min = tm->tm_min;
+ tm_1.tm_hour = tm->tm_hour;
+ tm_1.tm_mday = tm->tm_mday;
+ tm_1.tm_mon = tm->tm_mon;
+ tm_1.tm_year = tm->tm_year;
+ tm_1.tm_yday = -1;
+ tm_1.tm_isdst = tm->tm_isdst;
+ time_t t = mktime (&tm_1);
+ bool ok = 0 <= tm_1.tm_yday;
+#if HAVE_TM_ZONE || HAVE_TZNAME
+ ok = ok && save_abbr (tz, &tm_1);
#endif
- if (revert_tz (old_tz))
- return t;
+ if (revert_tz (old_tz) && ok)
+ {
+ *tm = tm_1;
+ return t;
+ }
}
return -1;
}
--
2.25.4
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] time_rz: fix issues with mktime_z failures,
Paul Eggert <=