From beafa6d6a908081ccb65e36953b2e58529499934 Mon Sep 17 00:00:00 2001 From: Leo C Date: Sat, 4 Jun 2016 15:48:50 +0200 Subject: [PATCH] Bugfix: reset getopt vars on start of a new argument line --- avr/cmd_attach.c | 2 +- avr/cmd_gpio.c | 2 +- avr/cmd_mem.c | 2 +- avr/cmd_misc.c | 2 +- avr/getopt-min.c | 8 ++++++-- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/avr/cmd_attach.c b/avr/cmd_attach.c index 9fbfa1e..d7bcafd 100644 --- a/avr/cmd_attach.c +++ b/avr/cmd_attach.c @@ -80,7 +80,7 @@ command_ret_t do_attach(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[ } /* reset getopt() */ - optind = 1; + optind = 0; int opt; while ((opt = getopt(argc, argv, PSTR("darwo:"))) != -1) { diff --git a/avr/cmd_gpio.c b/avr/cmd_gpio.c index 6b7b3f7..d3ef716 100644 --- a/avr/cmd_gpio.c +++ b/avr/cmd_gpio.c @@ -185,7 +185,7 @@ command_ret_t do_gpio(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) (void) cmdtp; (void) flag; /* reset getopt() */ - optind = 1; + optind = 0; int opt; while ((opt = getopt(argc, argv, PSTR("s"))) != -1) { diff --git a/avr/cmd_mem.c b/avr/cmd_mem.c index 9adee72..ded5146 100644 --- a/avr/cmd_mem.c +++ b/avr/cmd_mem.c @@ -202,7 +202,7 @@ command_ret_t do_mem_mw(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[ (void) cmdtp; (void) flag; /* reset getopt() */ - optind = 1; + optind = 0; int opt; while ((opt = getopt(argc, argv, PSTR("bwl"))) != -1) { diff --git a/avr/cmd_misc.c b/avr/cmd_misc.c index c9a3c45..1ff6f5d 100644 --- a/avr/cmd_misc.c +++ b/avr/cmd_misc.c @@ -24,7 +24,7 @@ command_ret_t do_echo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) (void) cmdtp; (void) flag; /* reset getopt() */ - optind = 1; + optind = 0; int opt; while ((opt = getopt(argc, argv, PSTR("n"))) != -1) { diff --git a/avr/getopt-min.c b/avr/getopt-min.c index f5ad912..8508f40 100644 --- a/avr/getopt-min.c +++ b/avr/getopt-min.c @@ -13,7 +13,7 @@ #include "common.h" /* definition of FLASH */ #include -int optind = 1; /* next argv[] index */ +int optind = 0; /* next argv[] index */ char *optarg; /* option parameter if any */ @@ -23,12 +23,16 @@ getopt( /* returns letter, '?', EOF */ char *const argv[], /* argument vector from main */ const FLASH char *optstring ) /* allowed args, e.g. "ab:c" */ { - static int sp = 1; /* position within argument */ + static int sp; /* position within argument */ int osp; /* saved `sp' for param test */ int c; /* option letter */ const FLASH char *cp; /* -> option in `optstring' */ optarg = NULL; + if (optind == 0) { /* start a new argument scan */ + optind = 1; + sp = 1; + } if ( sp == 1 ) /* fresh argument */ { -- 2.39.2