Module Name: src Committed By: dholland Date: Wed Nov 24 22:57:54 UTC 2010
Modified Files: src/usr.bin/stat: stat.c Log Message: Don't printf time_t with %d; fixes PR 44128 from yamt. With this change it successfully prints mtimes after 2038. To generate a diff of this commit: cvs rdiff -u -r1.28 -r1.29 src/usr.bin/stat/stat.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/stat/stat.c diff -u src/usr.bin/stat/stat.c:1.28 src/usr.bin/stat/stat.c:1.29 --- src/usr.bin/stat/stat.c:1.28 Mon Apr 13 23:02:36 2009 +++ src/usr.bin/stat/stat.c Wed Nov 24 22:57:53 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: stat.c,v 1.28 2009/04/13 23:02:36 lukem Exp $ */ +/* $NetBSD: stat.c,v 1.29 2010/11/24 22:57:53 dholland Exp $ */ /* * Copyright (c) 2002 The NetBSD Foundation, Inc. @@ -35,7 +35,7 @@ #include <sys/cdefs.h> #if !defined(lint) -__RCSID("$NetBSD: stat.c,v 1.28 2009/04/13 23:02:36 lukem Exp $"); +__RCSID("$NetBSD: stat.c,v 1.29 2010/11/24 22:57:53 dholland Exp $"); #endif #if ! HAVE_NBTOOL_CONFIG_H @@ -718,7 +718,6 @@ #endif /* HAVE_STRUCT_STAT_ST_BIRTHTIME */ small = (sizeof(secs) == 4); data = secs; - small = 1; tm = localtime(&secs); (void)strftime(path, sizeof(path), timefmt, tm); sdata = path; @@ -989,8 +988,9 @@ (void)snprintf(tmp, sizeof(tmp), "%d", size); (void)strcat(lfmt, tmp); } - (void)strcat(lfmt, "d"); - return (snprintf(buf, blen, lfmt, secs)); + (void)strcat(lfmt, "lld"); + return (snprintf(buf, blen, lfmt, + (long long)secs)); } /* @@ -1013,7 +1013,7 @@ (void)snprintf(tmp, sizeof(tmp), "%d", size); (void)strcat(lfmt, tmp); } - (void)strcat(lfmt, "d"); + (void)strcat(lfmt, "lld"); /* * The stuff after the decimal point always needs zero @@ -1025,7 +1025,7 @@ * We can "print" at most nine digits of precision. The * rest we will pad on at the end. */ - (void)snprintf(tmp, sizeof(tmp), "%dd", prec > 9 ? 9 : prec); + (void)snprintf(tmp, sizeof(tmp), "%dld", prec > 9 ? 9 : prec); (void)strcat(lfmt, tmp); /* @@ -1039,7 +1039,7 @@ * Use the format, and then tack on any zeroes that * might be required to make up the requested precision. */ - l = snprintf(buf, blen, lfmt, secs, nsecs); + l = snprintf(buf, blen, lfmt, (long long)secs, nsecs); for (; prec > 9 && l < (int)blen; prec--, l++) (void)strcat(buf, "0"); return (l);