=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/stat/stat.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- src/usr.bin/stat/stat.c 2005/04/07 12:18:35 1.7 +++ src/usr.bin/stat/stat.c 2005/04/11 08:14:26 1.8 @@ -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 @@ -508,7 +508,7 @@ 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 @@ 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 @@ (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 @@ * 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 @@ 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 @@ 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); }