git: 202adb223610 - main - xargs: fix -R so that it accepts negative numbers again

From: Dag-Erling Smørgrav <des_at_FreeBSD.org>
Date: Thu, 13 Jul 2023 21:37:24 UTC
The branch main has been updated by des:

URL: https://cgit.FreeBSD.org/src/commit/?id=202adb2236104141dc02d512084a3cc4bbe734c7

commit 202adb2236104141dc02d512084a3cc4bbe734c7
Author:     Daniel Tameling <tamelingdaniel@gmail.com>
AuthorDate: 2023-07-13 20:06:14 +0000
Commit:     Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2023-07-13 21:35:23 +0000

    xargs: fix -R so that it accepts negative numbers again
    
    fbc445addf9 converted the parsing of arguments to strtonum but made
    the accepted range for -R too restrictive. As documented in the man
    page, it should accept negative numbers.
    
    Added a test for this, which was provided by Jose Luis Duran.
    
    Fixes:          fbc445addf9
    MFC after:      1 week
    Reviewed by:    des, kevans
    Differential Revision:  https://reviews.freebsd.org/D41021
---
 usr.bin/xargs/tests/Makefile        | 1 +
 usr.bin/xargs/tests/regress.R-1.out | 4 ++++
 usr.bin/xargs/tests/regress.sh      | 3 ++-
 usr.bin/xargs/xargs.c               | 2 +-
 4 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/usr.bin/xargs/tests/Makefile b/usr.bin/xargs/tests/Makefile
index 228c1d545781..6bb861a6d27a 100644
--- a/usr.bin/xargs/tests/Makefile
+++ b/usr.bin/xargs/tests/Makefile
@@ -15,6 +15,7 @@ ${PACKAGE}FILES+=		regress.J.out
 ${PACKAGE}FILES+=		regress.L.out
 ${PACKAGE}FILES+=		regress.P1.out
 ${PACKAGE}FILES+=		regress.R.out
+${PACKAGE}FILES+=		regress.R-1.out
 ${PACKAGE}FILES+=		regress.in
 ${PACKAGE}FILES+=		regress.n1.out
 ${PACKAGE}FILES+=		regress.n2.out
diff --git a/usr.bin/xargs/tests/regress.R-1.out b/usr.bin/xargs/tests/regress.R-1.out
new file mode 100644
index 000000000000..7bdf58090c60
--- /dev/null
+++ b/usr.bin/xargs/tests/regress.R-1.out
@@ -0,0 +1,4 @@
+The quick brown quick brown quick brown quick brownquick brown quick brown quick brown
+The fox jumped fox jumped fox jumped fox jumpedfox jumped fox jumped fox jumped
+The over the lazy over the lazy over the lazy over the lazyover the lazy over the lazy over the lazy
+The dog dog dog dogdog dog dog
diff --git a/usr.bin/xargs/tests/regress.sh b/usr.bin/xargs/tests/regress.sh
index e79bfd4352fa..ed81d66bf2a6 100644
--- a/usr.bin/xargs/tests/regress.sh
+++ b/usr.bin/xargs/tests/regress.sh
@@ -1,6 +1,6 @@
 # $FreeBSD$
 
-echo 1..20
+echo 1..21
 
 REGRESSION_START($1)
 
@@ -10,6 +10,7 @@ REGRESSION_TEST(`J', `xargs -J% echo The % again. <${SRCDIR}/regress.in')
 REGRESSION_TEST(`L', `xargs -L3 echo <${SRCDIR}/regress.in')
 REGRESSION_TEST(`P1', `xargs -P1 echo <${SRCDIR}/regress.in')
 REGRESSION_TEST(`R', `xargs -I% -R1 echo The % % % %% % % <${SRCDIR}/regress.in')
+REGRESSION_TEST(`R-1', `xargs -I% -R-1 echo The % % % %% % % <${SRCDIR}/regress.in')
 REGRESSION_TEST(`n1', `xargs -n1 echo <${SRCDIR}/regress.in')
 REGRESSION_TEST(`n2', `xargs -n2 echo <${SRCDIR}/regress.in')
 REGRESSION_TEST(`n2P0',`xargs -n2 -P0 echo <${SRCDIR}/regress.in | sort')
diff --git a/usr.bin/xargs/xargs.c b/usr.bin/xargs/xargs.c
index e832cbb35a31..94a32d04fd67 100644
--- a/usr.bin/xargs/xargs.c
+++ b/usr.bin/xargs/xargs.c
@@ -200,7 +200,7 @@ main(int argc, char *argv[])
 			pflag = 1;
 			break;
 		case 'R':
-			Rflag = (int)strtonum(optarg, 0, INT_MAX, &errstr);
+			Rflag = (int)strtonum(optarg, INT_MIN, INT_MAX, &errstr);
 			if (errstr)
 				errx(1, "-%c %s: %s", ch, optarg, errstr);
 			break;