svn commit: r275585 - in stable/10: etc/mtree usr.bin/truncate usr.bin/truncate/tests
Jilles Tjoelker
jilles at FreeBSD.org
Sun Dec 7 22:30:56 UTC 2014
Author: jilles
Date: Sun Dec 7 22:30:54 2014
New Revision: 275585
URL: https://svnweb.freebsd.org/changeset/base/275585
Log:
MFC r267265: truncate: Detect integer overflow, fix relative sizes, add tests.
The change to expand_number (r204654) broke detection of too large sizes and
relative sizes ('+'/'-').
Also add some tests.
The usr.bin/truncate/Makefile is slightly different in the MFC because
src.opts.mk does not exist in stable/10.
PR: 190735
Submitted by: Kirk Russell
Added:
stable/10/usr.bin/truncate/tests/
- copied from r267265, head/usr.bin/truncate/tests/
Modified:
stable/10/etc/mtree/BSD.tests.dist
stable/10/usr.bin/truncate/Makefile
stable/10/usr.bin/truncate/truncate.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/etc/mtree/BSD.tests.dist
==============================================================================
--- stable/10/etc/mtree/BSD.tests.dist Sun Dec 7 21:47:19 2014 (r275584)
+++ stable/10/etc/mtree/BSD.tests.dist Sun Dec 7 22:30:54 2014 (r275585)
@@ -291,6 +291,8 @@
..
tr
..
+ truncate
+ ..
uudecode
..
uuencode
Modified: stable/10/usr.bin/truncate/Makefile
==============================================================================
--- stable/10/usr.bin/truncate/Makefile Sun Dec 7 21:47:19 2014 (r275584)
+++ stable/10/usr.bin/truncate/Makefile Sun Dec 7 22:30:54 2014 (r275585)
@@ -1,7 +1,13 @@
# $FreeBSD$
+.include <bsd.own.mk>
+
PROG= truncate
DPADD= ${LIBUTIL}
LDADD= -lutil
+.if ${MK_TESTS} != "no"
+SUBDIR+= tests
+.endif
+
.include <bsd.prog.mk>
Modified: stable/10/usr.bin/truncate/truncate.c
==============================================================================
--- stable/10/usr.bin/truncate/truncate.c Sun Dec 7 21:47:19 2014 (r275584)
+++ stable/10/usr.bin/truncate/truncate.c Sun Dec 7 22:30:54 2014 (r275585)
@@ -54,8 +54,8 @@ main(int argc, char **argv)
{
struct stat sb;
mode_t omode;
- off_t oflow, rsize, tsize;
- int64_t sz;
+ off_t oflow, rsize, sz, tsize;
+ uint64_t usz;
int ch, error, fd, oflags;
char *fname, *rname;
@@ -73,11 +73,13 @@ main(int argc, char **argv)
rname = optarg;
break;
case 's':
- if (expand_number(optarg, &sz) == -1)
+ do_relative = *optarg == '+' || *optarg == '-';
+ if (expand_number(do_relative ? optarg + 1 : optarg,
+ &usz) == -1 || (off_t)usz < 0)
errx(EXIT_FAILURE,
"invalid size argument `%s'", optarg);
- if (*optarg == '+' || *optarg == '-')
- do_relative = 1;
+
+ sz = (*optarg == '-') ? -(off_t)usz : (off_t)usz;
got_size = 1;
break;
default:
More information about the svn-src-stable-10
mailing list