From 2b08d0ed6747a4acf44b73068bfafc54ca1d0acf Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Thu, 28 May 2015 18:32:39 +0100 Subject: 35318: POSIX_BUILTINS behaviour for getopts. It needs to keep OPTIND, as well as the index within the string pointed to by OPTIND, global in this case. --- Src/builtin.c | 4 ++++ Src/exec.c | 12 ++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) (limited to 'Src') diff --git a/Src/builtin.c b/Src/builtin.c index a9afb4540..18c22f29e 100644 --- a/Src/builtin.c +++ b/Src/builtin.c @@ -4713,6 +4713,10 @@ bin_shift(char *name, char **argv, Options ops, UNUSED(int func)) return ret; } +/* + * Position of getopts option within OPTIND argument with multiple options. + */ + /**/ int optcind; diff --git a/Src/exec.c b/Src/exec.c index 527d61197..9f163a627 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -4910,9 +4910,11 @@ doshfunc(Shfunc shfunc, LinkList doshargs, int noreturnval) if (!(flags & PM_UNDEFINED)) scriptname = dupstring(name); oldzoptind = zoptind; - zoptind = 1; oldoptcind = optcind; - optcind = 0; + if (!isset(POSIXBUILTINS)) { + zoptind = 1; + optcind = 0; + } /* We need to save the current options even if LOCALOPTIONS is * * not currently set. That's because if it gets set in the * @@ -5049,8 +5051,10 @@ doshfunc(Shfunc shfunc, LinkList doshargs, int noreturnval) argzero = oargv0; } pparams = pptab; - optcind = oldoptcind; - zoptind = oldzoptind; + if (!isset(POSIXBUILTINS)) { + zoptind = oldzoptind; + optcind = oldoptcind; + } scriptname = oldscriptname; oflags = ooflags; -- cgit 1.4.1