]> granicus.if.org Git - procps-ng/commitdiff
top: ensure an EXIT_FAILURE with bad command line args
authorJim Warner <james.warner@comcast.net>
Thu, 2 Mar 2023 06:00:00 +0000 (00:00 -0600)
committerCraig Small <csmall@dropbear.xyz>
Wed, 8 Mar 2023 11:18:39 +0000 (22:18 +1100)
When getopt usage was added (plus long options) in the
patch shown below, top no longer returned EXIT_FAILURE
when the error message was generated by getopt itself.

This commit will restore the proper behavior no matter
who might issue a command line argument error message.

Thanks to Bastian Bittorf for discovering this buglet.

Reference(s):
https://gitlab.com/procps-ng/procps/-/issues/273
. sep, 2021 - getopt with long form args
commit c91b371485b7ffaea3a7c669b080328d141dfb6b

Signed-off-by: Jim Warner <james.warner@comcast.net>
src/top/top.c

index b09f6594afd3d8e555c7430fccfb036a4e83e504..ad862654f790f2e0ddf0f0f5d6d9e6ccc0c4b2b3 100644 (file)
@@ -556,7 +556,7 @@ static void bye_bye (const char *str) {
    }
 
    /* we'll only have a 'str' if called by error_exit() |
-      not ever from the sig_endpgm() signal handler ... | */
+      and parse_args(), never from a signal handler ... | */
    if (str) {
       fputs(str, stderr);
       exit(EXIT_FAILURE);
@@ -4372,8 +4372,9 @@ static void parse_args (int argc, char **argv) {
             Width_mode = (int)tmp;
             continue;
          default:
-            // we'll rely on getopt for any error message ...
-            bye_bye(NULL);
+            /* we'll rely on getopt for any error message while
+               forcing an EXIT_FAILURE with an empty string ... */
+            bye_bye("");
       } // end: switch (ch)
 #ifndef GETOPTFIX_NO
       if (cp) error_exit(fmtmk(N_fmt(UNKNOWN_opts_fmt), cp));