summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--usr.bin/stat/stat.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/usr.bin/stat/stat.c b/usr.bin/stat/stat.c
index e9b1f6232c7..a22fb934e66 100644
--- a/usr.bin/stat/stat.c
+++ b/usr.bin/stat/stat.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: stat.c,v 1.7 2005/04/07 12:18:35 otto Exp $ */
+/* $OpenBSD: stat.c,v 1.8 2005/04/11 08:14:26 deraadt Exp $ */
/* $NetBSD: stat.c,v 1.19 2004/06/20 22:20:16 jmc Exp $ */
/*
@@ -39,7 +39,7 @@
#ifndef lint
static const char rccs_id[] =
- "$OpenBSD: stat.c,v 1.7 2005/04/07 12:18:35 otto Exp $";
+ "$OpenBSD: stat.c,v 1.8 2005/04/11 08:14:26 deraadt Exp $";
#endif
#include <sys/types.h>
@@ -508,7 +508,7 @@ format1(const struct stat *st,
struct tm *tm;
time_t secs;
long nsecs;
- int l, small, formats, gottime;
+ int l, small, formats, gottime, n;
formats = 0;
small = 0;
@@ -785,8 +785,9 @@ format1(const struct stat *st,
l2 = format1(st, file, fmt, flen,
mindev, sizeof(mindev), flags, size, prec,
ofmt, LOW_PIECE, SHOW_st_rdev);
- return (snprintf(buf, blen, "%.*s,%.*s",
- l1, majdev, l2, mindev));
+ n = snprintf(buf, blen, "%.*s,%.*s",
+ l1, majdev, l2, mindev);
+ return (n >= blen ? blen : n);
} else {
return (format1(st, file, fmt, flen, buf, blen,
flags, size, prec, ofmt, 0, SHOW_st_size));
@@ -833,7 +834,8 @@ format1(const struct stat *st,
(void)strlcat(lfmt, tmp, sizeof(lfmt));
}
(void)strlcat(lfmt, "d", sizeof(lfmt));
- return (snprintf(buf, blen, lfmt, secs));
+ n = snprintf(buf, blen, lfmt, secs);
+ return (n >= blen ? blen : n);
}
/*
@@ -883,6 +885,8 @@ format1(const struct stat *st,
* might be required to make up the requested precision.
*/
l = snprintf(buf, blen, lfmt, secs, nsecs);
+ if (l >= blen)
+ return (l);
for (; prec > 9 && l < blen; prec--, l++)
(void)strlcat(buf, "0", sizeof(lfmt));
return (l);
@@ -907,7 +911,8 @@ format1(const struct stat *st,
if (sdata == NULL)
errx(1, "%.*s: bad format", (int)flen, fmt);
(void)strlcat(lfmt, "s", sizeof(lfmt));
- return (snprintf(buf, blen, lfmt, sdata));
+ n = snprintf(buf, blen, lfmt, sdata);
+ return (n >= blen ? blen : n);
}
/*
@@ -928,5 +933,6 @@ format1(const struct stat *st,
case FMTF_HEX: (void)strlcat(lfmt, "x", sizeof(lfmt)); break;
}
- return (snprintf(buf, blen, lfmt, data));
+ n = snprintf(buf, blen, lfmt, data);
+ return (n >= blen ? blen : n);
}