On Mon, Jun 14, 2004 at 11:51:48AM -0400, Olson, Arthur David (NIH/NCI) wrote:
Here's a proposed change to zdump to avoid crashes when NULL is returned by asctime. [...] if (v) ! (void) printf("%.24s UTC = ", asctime(gmtime(&t))); tmp = localtime(&t); ! (void) printf("%.24s", asctime(tmp)); ... if (v) ! (void) printf("%.24s UTC = ", nonnull(asctime(gmtime(&t)))); tmp = localtime(&t); ! (void) printf("%.24s", nonnull(asctime(tmp)));
That might work, depending on the local implementation of asctime(), but I'd feel more comfortable with a patch that takes care to avoid passing a NULL to asctime() in the first place. Perhaps this patch instead? --Ken Pizzini --- zdump.c-orig 2004-03-02 06:52:38.000000000 -0800 +++ zdump.c 2004-06-14 20:05:19.453250080 -0700 @@ -1,4 +1,4 @@ -static char elsieid[] = "@(#)zdump.c 7.31"; +static char elsieid[] = "@(#)zdump.c 7.32"; /* ** This code has been made independent of the rest of the time @@ -334,6 +334,14 @@ return result; } +static char * +null_safe_asctime(t) +const struct tm * t; +{ + static char null[] = "NULL"; + return (t == NULL) ? null : asctime(t); +} + static void show(zone, t, v) char * zone; @@ -344,9 +352,9 @@ (void) printf("%-*s ", (int) longest, zone); if (v) - (void) printf("%.24s UTC = ", asctime(gmtime(&t))); + (void) printf("%.24s UTC = ", null_safe_asctime(gmtime(&t))); tmp = localtime(&t); - (void) printf("%.24s", asctime(tmp)); + (void) printf("%.24s", null_safe_asctime(tmp)); if (*abbr(tmp) != '\0') (void) printf(" %s", abbr(tmp)); if (v) {