diff options
author | Peter Stephenson <pws@zsh.org> | 2015-05-28 18:32:39 +0100 |
---|---|---|
committer | Peter Stephenson <pws@zsh.org> | 2015-05-28 18:32:39 +0100 |
commit | 2b08d0ed6747a4acf44b73068bfafc54ca1d0acf (patch) | |
tree | 6b2ef1ca29d0633ee231e6181a1b0d5e16356691 /Src | |
parent | cb596a55d921cb638a3cf0ede3ee60ae13728c10 (diff) | |
download | zsh-2b08d0ed6747a4acf44b73068bfafc54ca1d0acf.tar.gz zsh-2b08d0ed6747a4acf44b73068bfafc54ca1d0acf.tar.xz zsh-2b08d0ed6747a4acf44b73068bfafc54ca1d0acf.zip |
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.
Diffstat (limited to 'Src')
-rw-r--r-- | Src/builtin.c | 4 | ||||
-rw-r--r-- | Src/exec.c | 12 |
2 files changed, 12 insertions, 4 deletions
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; |