Also be a bit more consistent about `COMMAND [ARG...]` in usage text.
---
 tests/cmp.test      | 6 ++++--
 tests/env.test      | 2 ++
 tests/sort.test     | 1 +
 toys/other/chroot.c | 9 ++++++---
 toys/posix/cmp.c    | 3 +--
 toys/posix/env.c    | 4 ++--
 toys/posix/nice.c   | 8 +++++---
 toys/posix/nohup.c  | 6 ++++--
 toys/posix/sort.c   | 3 ++-
 9 files changed, 27 insertions(+), 15 deletions(-)
From c7caed8e2879f5a9609cd40d9a0da79eb0609cfa Mon Sep 17 00:00:00 2001
From: Elliott Hughes <[email protected]>
Date: Mon, 18 Mar 2019 20:37:53 -0700
Subject: [PATCH] cmp/env/nice/nohup/sort: use TOYFLAG_ARGFAIL.

Also be a bit more consistent about `COMMAND [ARG...]` in usage text.
---
 tests/cmp.test      | 6 ++++--
 tests/env.test      | 2 ++
 tests/sort.test     | 1 +
 toys/other/chroot.c | 9 ++++++---
 toys/posix/cmp.c    | 3 +--
 toys/posix/env.c    | 4 ++--
 toys/posix/nice.c   | 8 +++++---
 toys/posix/nohup.c  | 6 ++++--
 toys/posix/sort.c   | 3 ++-
 9 files changed, 27 insertions(+), 15 deletions(-)

diff --git a/tests/cmp.test b/tests/cmp.test
index 3b2dd1b2..62d4b89d 100755
--- a/tests/cmp.test
+++ b/tests/cmp.test
@@ -2,8 +2,10 @@
 
 [ -f testing.sh ] && . testing.sh
 
-testing "not enough arguments [fail]" "cmp input 2>/dev/null || echo yes" "yes\n" "foo" ""
-testing "missing file1 [fail]" "cmp file1 input 2>/dev/null || echo yes" "yes\n" "foo" ""
+# TODO: coreutils cmp uses stdin if only one file is given
+SKIP_HOST=1 testing "not enough arguments [fail]" 'cmp input 2>/dev/null || echo $?' "2\n" "foo" ""
+
+testing "missing file1 [fail]" 'cmp file1 input 2>/dev/null || echo $?' "2\n" "foo" ""
 
 #mkdir dir
 #testing "directory [fail]" "cmp dir dir 2>/dev/null || echo yes" \
diff --git a/tests/env.test b/tests/env.test
index e92164c5..286fb36c 100755
--- a/tests/env.test
+++ b/tests/env.test
@@ -16,3 +16,5 @@ testcmd "-i =" "-i one=two three=four env | sort" \
   "one=two\nthree=four\n" "" ""
 testcmd "-0" "-i five=six seven=eight env -0 | sort -z" "five=six\0seven=eight\0" "" ""
 unset WALRUS BANANA LETTERS FILTER
+
+testcmd "early fail" '--oops 2> /dev/null ; echo $?' "125\n" "" ""
diff --git a/tests/sort.test b/tests/sort.test
index a40d1b0f..dd2b8263 100755
--- a/tests/sort.test
+++ b/tests/sort.test
@@ -7,6 +7,7 @@
 
 # The basic tests.  These should work even with the small config.
 
+testing "unknown argument" 'sort --oops 2>/dev/null ; echo $?' "2\n" "" ""
 testing "sort" "sort input" "a\nb\nc\n" "c\na\nb\n" ""
 testing "#2" "sort input" "010\n1\n3\n" "3\n1\n010\n" ""
 testing "stdin" "sort" "a\nb\nc\n" "" "b\na\nc\n"
diff --git a/toys/other/chroot.c b/toys/other/chroot.c
index b6ef17d6..d791f34a 100644
--- a/toys/other/chroot.c
+++ b/toys/other/chroot.c
@@ -7,13 +7,13 @@
  * The container guys use pivot_root() to deal with this, which does actually
  * edit mount tree. (New option? Kernel patch?)
 
-USE_CHROOT(NEWTOY(chroot, "^<1", TOYFLAG_USR|TOYFLAG_SBIN))
+USE_CHROOT(NEWTOY(chroot, "^<1", TOYFLAG_USR|TOYFLAG_SBIN|TOYFLAG_ARGFAIL(125)))
 
 config CHROOT
   bool "chroot"
   default y
   help
-    usage: chroot NEWPATH [commandline...]
+    usage: chroot NEWROOT [COMMAND [ARG...]]
 
     Run command within a new root directory. If no command, run /bin/sh.
 */
@@ -24,7 +24,10 @@ void chroot_main(void)
 {
   char *binsh[] = {"/bin/sh", "-i", 0};
 
-  if (chdir(*toys.optargs) || chroot(".")) perror_exit_raw(*toys.optargs);
+  if (chdir(*toys.optargs) || chroot(".")) {
+    toys.exitval = 125;
+    perror_exit_raw(*toys.optargs);
+  }
   if (toys.optargs[1]) xexec(toys.optargs+1);
   else xexec(binsh);
 }
diff --git a/toys/posix/cmp.c b/toys/posix/cmp.c
index 6cd410fc..c573f02e 100644
--- a/toys/posix/cmp.c
+++ b/toys/posix/cmp.c
@@ -4,7 +4,7 @@
  *
  * See http://opengroup.org/onlinepubs/9699919799/utilities/cmp.html
 
-USE_CMP(NEWTOY(cmp, "<2>2ls(silent)(quiet)[!ls]", TOYFLAG_USR|TOYFLAG_BIN))
+USE_CMP(NEWTOY(cmp, "<2>2ls(silent)(quiet)[!ls]", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(2)))
 
 config CMP
   bool "cmp"
@@ -81,4 +81,3 @@ void cmp_main(void)
   loopfiles_rw(toys.optargs, O_CLOEXEC|(WARN_ONLY*!(toys.optflags&FLAG_s)), 0,
     do_cmp);
 }
-
diff --git a/toys/posix/env.c b/toys/posix/env.c
index 2de8f690..5c7bb789 100644
--- a/toys/posix/env.c
+++ b/toys/posix/env.c
@@ -6,13 +6,13 @@
  *
  * Deviations from posix: "-" argument and -0
 
-USE_ENV(NEWTOY(env, "^0iu*", TOYFLAG_USR|TOYFLAG_BIN))
+USE_ENV(NEWTOY(env, "^0iu*", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(125)))
 
 config ENV
   bool "env"
   default y
   help
-    usage: env [-i] [-u NAME] [NAME=VALUE...] [command [option...]]
+    usage: env [-i] [-u NAME] [NAME=VALUE...] [COMMAND [ARG...]]
 
     Set the environment for command invocation, or list environment variables.
 
diff --git a/toys/posix/nice.c b/toys/posix/nice.c
index ca5e2224..c26f66d3 100644
--- a/toys/posix/nice.c
+++ b/toys/posix/nice.c
@@ -10,7 +10,7 @@ config NICE
   bool "nice"
   default y
   help
-    usage: nice [-n PRIORITY] command [args...]
+    usage: nice [-n PRIORITY] COMMAND [ARG...]
 
     Run a command line at an increased or decreased scheduling priority.
 
@@ -32,7 +32,9 @@ void nice_main(void)
   if (!toys.optflags) TT.n = 10;
 
   errno = 0;
-  if (nice(TT.n)==-1 && errno) perror_exit("Can't set priority");
-
+  if (nice(TT.n)==-1 && errno) {
+    toys.exitval = 125;
+    perror_exit("Can't set priority");
+  }
   xexec(toys.optargs);
 }
diff --git a/toys/posix/nohup.c b/toys/posix/nohup.c
index b302cbe4..e5b526f7 100644
--- a/toys/posix/nohup.c
+++ b/toys/posix/nohup.c
@@ -4,13 +4,13 @@
  *
  * See http://opengroup.org/onlinepubs/9699919799/utilities/nohup.html
 
-USE_NOHUP(NEWTOY(nohup, "<1^", TOYFLAG_USR|TOYFLAG_BIN))
+USE_NOHUP(NEWTOY(nohup, "<1^", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(125)))
 
 config NOHUP
   bool "nohup"
   default y
   help
-    usage: nohup COMMAND [ARGS...]
+    usage: nohup COMMAND [ARG...]
 
     Run a command that survives the end of its terminal.
 
@@ -21,6 +21,7 @@ config NOHUP
 
 void nohup_main(void)
 {
+  toys.exitval = 125;
   xsignal(SIGHUP, SIG_IGN);
   if (isatty(1)) {
     close(1);
@@ -38,5 +39,6 @@ void nohup_main(void)
     close(0);
     xopen_stdio("/dev/null", O_RDONLY);
   }
+  toys.exitval = 0;
   xexec(toys.optargs);
 }
diff --git a/toys/posix/sort.c b/toys/posix/sort.c
index 9433aef2..6369f9c7 100644
--- a/toys/posix/sort.c
+++ b/toys/posix/sort.c
@@ -7,7 +7,7 @@
  * Deviations from POSIX: Lots.
  * We invented -x
 
-USE_SORT(NEWTOY(sort, USE_SORT_FLOAT("g")"S:T:m" "o:k*t:" "xVbMcszdfirun", TOYFLAG_USR|TOYFLAG_BIN))
+USE_SORT(NEWTOY(sort, USE_SORT_FLOAT("g")"S:T:m" "o:k*t:" "xVbMcszdfirun", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_ARGFAIL(2)))
 
 config SORT
   bool "sort"
@@ -343,6 +343,7 @@ void sort_main(void)
           if (!temp2 || flag>FLAG_x
             || (flag&(FLAG_u|FLAG_c|FLAG_s|FLAG_z)))
           {
+            toys.exitval = 2;
             error_exit("Unknown key option.");
           }
           // b after , means strip _trailing_ space, not leading.
-- 
2.21.0.225.g810b269d1ac-goog

_______________________________________________
Toybox mailing list
[email protected]
http://lists.landley.net/listinfo.cgi/toybox-landley.net

Reply via email to