diff --git a/bin/ls/print.c b/bin/ls/print.c index bbe5c6f8a6f..5e8a54ca062 100644 --- a/bin/ls/print.c +++ b/bin/ls/print.c @@ -432,18 +432,17 @@ printdev(size_t width, dev_t dev) (void)printf("%#*jx ", (u_int)width, (uintmax_t)dev); } -static size_t +static void ls_strftime(char *str, size_t len, const char *fmt, const struct tm *tm) { char *posb, nfmt[BUFSIZ]; const char *format = fmt; - size_t ret; if ((posb = strstr(fmt, "%b")) != NULL) { if (month_max_size == 0) { compute_abbreviated_month_size(); } - if (month_max_size > 0) { + if (month_max_size > 0 && tm != NULL) { snprintf(nfmt, sizeof(nfmt), "%.*s%s%*s%s", (int)(posb - fmt), fmt, get_abmon(tm->tm_mon), @@ -453,8 +452,10 @@ ls_strftime(char *str, size_t len, const char *fmt, const struct tm *tm) format = nfmt; } } - ret = strftime(str, len, format, tm); - return (ret); + if (tm != NULL) + strftime(str, len, format, tm); + else + strlcpy(str, "bad date val", len); } static void diff --git a/usr.bin/find/ls.c b/usr.bin/find/ls.c index 8c4c16ed346..8d740621625 100644 --- a/usr.bin/find/ls.c +++ b/usr.bin/find/ls.c @@ -88,6 +88,7 @@ printtime(time_t ftime) static time_t lnow; const char *format; static int d_first = -1; + struct tm *tm; #ifdef D_MD_ORDER if (d_first < 0) @@ -103,7 +104,10 @@ printtime(time_t ftime) else /* mmm dd yyyy || dd mmm yyyy */ format = d_first ? "%e %b %Y " : "%b %e %Y "; - strftime(longstring, sizeof(longstring), format, localtime(&ftime)); + if ((tm = localtime(&ftime)) != NULL) + strftime(longstring, sizeof(longstring), format, tm); + else + strlcpy(longstring, "bad date val ", sizeof(longstring)); fputs(longstring, stdout); }