From mboxrd@z Thu Jan 1 00:00:00 1970 Delivery-date: Wed, 14 Jun 2023 15:57:00 +0200 Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by lore.white.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1q9Qze-006j4P-48 for lore@lore.pengutronix.de; Wed, 14 Jun 2023 15:57:00 +0200 Received: from bombadil.infradead.org ([2607:7c80:54:3::133]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q9Qzb-0005iZ-Mt for lore@pengutronix.de; Wed, 14 Jun 2023 15:57:00 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=izSQ0hCE8qM5Kz1cjBiKKOVj4Ch/5waMa1wRrSvFdh4=; b=cDFT45WD0M58E4R0fX8+q1DIfE QKwptE4njTNHeuEC+BSLzwtOJD3okLfwM6ARA8N4I0K1uAwe1EMqbyWlRYdzf7ifNFKciDJTYQZXd o5YrByOEeMt4JxuCNLZPs8bXv3aNPiWuMwpEwt9PYEAQEGu74TO5nKj9zAlkTNE8UzQpv+1A0S3f1 2MqLqnIiEj/jA+XzhJPIeXCwKJwjilzmFUV8A5A5LL6TwLXIVma2R/0bQRaZeblKFGe43RM4sJKje Ns30WyA9xvO83HVM77MEl2wKvyf0G4u14H/qis31m4+JUTprlo/vLiM73Bwd1zUcgNZ6+blJAAQb1 gwiJlInw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q9Qyb-00Bp9c-04; Wed, 14 Jun 2023 13:55:57 +0000 Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q9QyV-00Bp5R-1t for barebox@lists.infradead.org; Wed, 14 Jun 2023 13:55:53 +0000 Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q9QyU-0005Di-D4; Wed, 14 Jun 2023 15:55:50 +0200 Received: from [2a0a:edc0:0:1101:1d::54] (helo=dude05.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1q9QyT-007Mxp-OR; Wed, 14 Jun 2023 15:55:49 +0200 Received: from afa by dude05.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1q9QyR-008D8t-HU; Wed, 14 Jun 2023 15:55:47 +0200 From: Ahmad Fatoum To: barebox@lists.infradead.org Cc: Ahmad Fatoum Date: Wed, 14 Jun 2023 15:54:49 +0200 Message-Id: <20230614135452.1884124-8-a.fatoum@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230614135452.1884124-1-a.fatoum@pengutronix.de> References: <20230614135452.1884124-1-a.fatoum@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230614_065551_627746_3A578353 X-CRM114-Status: GOOD ( 16.53 ) X-BeenThere: barebox@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "barebox" X-SA-Exim-Connect-IP: 2607:7c80:54:3::133 X-SA-Exim-Mail-From: barebox-bounces+lore=pengutronix.de@lists.infradead.org X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on metis.ext.pengutronix.de X-Spam-Level: X-Spam-Status: No, score=-4.9 required=4.0 tests=AWL,BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Subject: [PATCH 07/10] commands: help: ignore options after first regular argument X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on metis.ext.pengutronix.de) If some-command -n foo bar -v fails, it would be nice to be able to just stick help in front of the command to get help text. This doesn't work currently, because getopt called for help will complain about not knowing some-command's options. Fix this by only parsing help options up to the first non-option argument (i.e. one that doesn't start with `-'). Signed-off-by: Ahmad Fatoum --- commands/help.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/commands/help.c b/commands/help.c index ba8542b90f01..87c1368d746d 100644 --- a/commands/help.c +++ b/commands/help.c @@ -3,7 +3,6 @@ #include #include -#include #include @@ -72,10 +71,16 @@ static void list_commands(int verbose) static int do_help(int argc, char *argv[]) { struct command *cmdtp; - int opt, verbose = 0, all = 0; + int verbose = 0, all = 0; + int argi; - while ((opt = getopt(argc, argv, "va")) > 0) { - switch (opt) { + /* We can't use getopt() here because we want to stop at the first + * non-option to support, so we can just prefix help in front + * of a command with options. + */ + argi = 1; + while (argi < argc && *argv[argi] == '-') { + switch (argv[argi++][1]) { case 'v': verbose = 1; break; @@ -93,20 +98,20 @@ static int do_help(int argc, char *argv[]) return 0; } - if (optind == argc) { /* show list of commands */ + if (argi == argc) { /* show list of commands */ list_commands(verbose); return 0; } /* command help (long version) */ - if ((cmdtp = find_cmd(argv[optind])) != NULL) { + if ((cmdtp = find_cmd(argv[argi])) != NULL) { barebox_cmd_usage(cmdtp); return 0; } else { printf ("Unknown command '%s' - try 'help'" " without arguments for list of all" - " known commands\n\n", argv[optind] + " known commands\n\n", argv[argi] ); return 1; } -- 2.39.2