svn commit: r216207 - head/usr.bin/stat
Doug Barton
dougb at FreeBSD.org
Sun Dec 5 21:53:13 UTC 2010
Author: dougb
Date: Sun Dec 5 21:53:12 2010
New Revision: 216207
URL: http://svn.freebsd.org/changeset/base/216207
Log:
Bring in the following changes from NetBSD. See the discussion at:
http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=44128
1.29
"Don't printf time_t with %d; fixes PR 44128 from yamt. With this change it
successfully prints mtimes after 2038."
1.30
"Improve previous with comments."
Obtained from: dholland at NetBSD.org (both)
Modified:
head/usr.bin/stat/stat.c
Modified: head/usr.bin/stat/stat.c
==============================================================================
--- head/usr.bin/stat/stat.c Sun Dec 5 21:33:05 2010 (r216206)
+++ head/usr.bin/stat/stat.c Sun Dec 5 21:53:12 2010 (r216207)
@@ -30,7 +30,7 @@
#include <sys/cdefs.h>
#if 0
#ifndef lint
-__RCSID("$NetBSD: stat.c,v 1.28 2009/04/13 23:02:36 lukem Exp $");
+__RCSID("$NetBSD: stat.c,v 1.30 2010/11/25 04:33:30 dholland Exp $");
#endif
#endif
@@ -728,7 +728,6 @@ format1(const struct stat *st,
ts = *tsp; /* copy so we can muck with it */
small = (sizeof(ts.tv_sec) == 4);
data = ts.tv_sec;
- small = 1;
tm = localtime(&ts.tv_sec);
(void)strftime(path, sizeof(path), timefmt, tm);
sdata = path;
@@ -951,8 +950,9 @@ format1(const struct stat *st,
(void)snprintf(tmp, sizeof(tmp), "%d", size);
(void)strcat(lfmt, tmp);
}
- (void)strcat(lfmt, "d");
- return (snprintf(buf, blen, lfmt, ts.tv_sec));
+ (void)strcat(lfmt, "lld");
+ return (snprintf(buf, blen, lfmt,
+ (long long)ts.tv_sec));
}
/*
@@ -975,7 +975,8 @@ format1(const struct stat *st,
(void)snprintf(tmp, sizeof(tmp), "%d", size);
(void)strcat(lfmt, tmp);
}
- (void)strcat(lfmt, "d");
+ /* Seconds: time_t cast to long long. */
+ (void)strcat(lfmt, "lld");
/*
* The stuff after the decimal point always needs zero
@@ -986,8 +987,10 @@ format1(const struct stat *st,
/*
* We can "print" at most nine digits of precision. The
* rest we will pad on at the end.
+ *
+ * Nanoseconds: long.
*/
- (void)snprintf(tmp, sizeof(tmp), "%dd", prec > 9 ? 9 : prec);
+ (void)snprintf(tmp, sizeof(tmp), "%dld", prec > 9 ? 9 : prec);
(void)strcat(lfmt, tmp);
/*
@@ -1001,7 +1004,7 @@ format1(const struct stat *st,
* Use the format, and then tack on any zeroes that
* might be required to make up the requested precision.
*/
- l = snprintf(buf, blen, lfmt, ts.tv_sec, ts.tv_nsec);
+ l = snprintf(buf, blen, lfmt, (long long)ts.tv_sec, ts.tv_nsec);
for (; prec > 9 && l < (int)blen; prec--, l++)
(void)strcat(buf, "0");
return (l);
More information about the svn-src-head
mailing list