diff options
author | Pali Rohár <pali@kernel.org> | 2022-03-07 19:03:09 +0100 |
---|---|---|
committer | Stefan Roese <sr@denx.de> | 2022-03-14 14:04:18 +0100 |
commit | c497ae70238a743cb804f1cb9b95648a6a2bdd51 (patch) | |
tree | fe468b85fa2272aa747af726c8448c6fa633c338 | |
parent | 3782f55ae81825c6ce9f85ca4e6c6798e88087c5 (diff) | |
download | u-boot-c497ae70238a743cb804f1cb9b95648a6a2bdd51.tar.gz u-boot-c497ae70238a743cb804f1cb9b95648a6a2bdd51.tar.bz2 u-boot-c497ae70238a743cb804f1cb9b95648a6a2bdd51.zip |
tools: kwboot: Allow to mix positional arguments with option -b
Commit 9e6d71d2b55f ("tools: kwboot: Allow to use -b without image path as
the last getopt() option") broke usage of kwboot with following arguments:
kwboot -t -B 115200 /dev/ttyUSB0 -b u-boot-spl.kwb
Fix parsing of option -b with optional argument again.
Fixes: 9e6d71d2b55f ("tools: kwboot: Allow to use -b without image path as the last getopt() option")
Signed-off-by: Pali Rohár <pali@kernel.org>
Reported-by: Tony Dinh <mibodhi@gmail.com>
Tested-by: Tony Dinh <mibodhi at gmail.com>
Reviewed-by: Stefan Roese <sr@denx.de>
-rw-r--r-- | tools/kwboot.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/tools/kwboot.c b/tools/kwboot.c index 3b45e19a30..9f2dd2de4e 100644 --- a/tools/kwboot.c +++ b/tools/kwboot.c @@ -2073,7 +2073,8 @@ main(int argc, char **argv) bootmsg = 1; if (prev_optind == optind) goto usage; - if (optind < argc - 1 && argv[optind] && argv[optind][0] != '-') + /* Option -b could have optional argument which specify image path */ + if (optind < argc && argv[optind] && argv[optind][0] != '-') imgpath = argv[optind++]; break; @@ -2128,10 +2129,19 @@ main(int argc, char **argv) if (!bootmsg && !term && !debugmsg && !imgpath) goto usage; - ttypath = argv[optind++]; - - if (optind != argc) + /* + * If there is no remaining argument but optional imgpath was parsed + * then it means that optional imgpath was eaten by getopt parser. + * Reassing imgpath to required ttypath argument. + */ + if (optind == argc && imgpath) { + ttypath = imgpath; + imgpath = NULL; + } else if (optind + 1 == argc) { + ttypath = argv[optind]; + } else { goto usage; + } /* boot and debug message use baudrate 115200 */ if (((bootmsg && !imgpath) || debugmsg) && baudrate != 115200) { |