summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--shell/ash.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 21373b6..3effa0c 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -10554,7 +10554,7 @@ change_random(const char *value)
#if ENABLE_ASH_GETOPTS
static int
-getopts(char *optstr, char *optvar, char **optfirst, int *param_optind, int *optoff)
+getopts(char *optstr, char *optvar, char **optfirst)
{
char *p, *q;
char c = '?';
@@ -10565,12 +10565,15 @@ getopts(char *optstr, char *optvar, char **optfirst, int *param_optind, int *opt
sbuf[1] = '\0';
- optnext = optfirst + *param_optind - 1;
+ optnext = optfirst + shellparam.optind - 1;
- if (*param_optind <= 1 || *optoff < 0 || (int)strlen(optnext[-1]) < *optoff)
+ if (shellparam.optind <= 1
+ || shellparam.optoff < 0
+ || (int)strlen(optnext[-1]) < shellparam.optoff
+ ) {
p = NULL;
- else
- p = optnext[-1] + *optoff;
+ } else
+ p = optnext[-1] + shellparam.optoff;
if (p == NULL || *p == '\0') {
/* Current word is done, advance */
p = *optnext;
@@ -10625,15 +10628,15 @@ getopts(char *optstr, char *optvar, char **optfirst, int *param_optind, int *opt
} else
err |= setvarsafe("OPTARG", nullstr, 0);
out:
- *optoff = p ? p - *(optnext - 1) : -1;
- *param_optind = optnext - optfirst + 1;
- err |= setvarsafe("OPTIND", itoa(*param_optind), VNOFUNC);
+ shellparam.optoff = p ? p - *(optnext - 1) : -1;
+ shellparam.optind = optnext - optfirst + 1;
+ err |= setvarsafe("OPTIND", itoa(shellparam.optind), VNOFUNC);
sbuf[0] = c;
/*sbuf[1] = '\0'; - already is */
err |= setvarsafe(optvar, sbuf, 0);
if (err) {
- *param_optind = 1;
- *optoff = -1;
+ shellparam.optind = 1;
+ shellparam.optoff = -1;
flush_stdout_stderr();
raise_exception(EXERROR);
}
@@ -10667,8 +10670,7 @@ getoptscmd(int argc, char **argv)
}
}
- return getopts(argv[1], argv[2], optbase, &shellparam.optind,
- &shellparam.optoff);
+ return getopts(argv[1], argv[2], optbase);
}
#endif /* ASH_GETOPTS */