From b6f92f7627c7d97749d44a9a17847a570a25a46f Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Tue, 25 Jan 2022 10:35:37 -0800
Subject: [PROPOSED] zdump -v reports localtime+gmtime failures better

* NEWS: Mention this.
* zdump.c (show): When localtime and/or gmtime fails on a
timestamp N, report "N (localtime failed)" and/or "N (gmtime
failed)" instead of hard-to-follow messages like plain N or "NULL".
---
 NEWS    | 3 +++
 zdump.c | 8 ++++++--
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/NEWS b/NEWS
index 9568a86..5c74e5e 100644
--- a/NEWS
+++ b/NEWS
@@ -20,6 +20,9 @@ Unreleased, experimental changes
     reader no longer mistakenly attempts to parse a version 1 TZIf
     file header as a TZ string.
 
+    zdump -v now outputs "(localtime failed)" and "(gmtime failed)"
+    when local time and UT cannot be determined for a timestamp.
+
   Changes to build procedure
 
     Distribution tarballs now use standard POSIX.1-1988 ustar format
diff --git a/zdump.c b/zdump.c
index e198b04..f08afbd 100644
--- a/zdump.c
+++ b/zdump.c
@@ -798,6 +798,7 @@ show(timezone_t tz, char *zone, time_t t, bool v)
 		gmtmp = my_gmtime_r(&t, &gmtm);
 		if (gmtmp == NULL) {
 			printf(tformat(), t);
+			printf(" (gmtime failed)");
 		} else {
 			dumptime(gmtmp);
 			printf(" UT");
@@ -805,8 +806,11 @@ show(timezone_t tz, char *zone, time_t t, bool v)
 		printf(" = ");
 	}
 	tmp = my_localtime_rz(tz, &t, &tm);
-	dumptime(tmp);
-	if (tmp != NULL) {
+	if (tmp == NULL) {
+		printf(tformat(), t);
+		printf(" (localtime failed)");
+	} else {
+		dumptime(tmp);
 		if (*abbr(tmp) != '\0')
 			printf(" %s", abbr(tmp));
 		if (v) {
-- 
2.32.0

