sh: When setting option via long name, don't go via letter.
Looking up the letter makes no sense and prevents adding options that only have a long name, no letter.
This commit is contained in:
parent
7b59f7bc5c
commit
58bbcdb183
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=286788
@ -73,6 +73,7 @@ char *minusc; /* argument to -c option */
|
|||||||
static void options(int);
|
static void options(int);
|
||||||
static void minus_o(char *, int);
|
static void minus_o(char *, int);
|
||||||
static void setoption(int, int);
|
static void setoption(int, int);
|
||||||
|
static void setoptionbyindex(int, int);
|
||||||
static int getopts(char *, char *, char **, char ***, char **);
|
static int getopts(char *, char *, char **, char ***, char **);
|
||||||
|
|
||||||
|
|
||||||
@ -269,7 +270,7 @@ minus_o(char *name, int val)
|
|||||||
} else {
|
} else {
|
||||||
for (i = 0; i < NOPTS; i++)
|
for (i = 0; i < NOPTS; i++)
|
||||||
if (equal(name, optlist[i].name)) {
|
if (equal(name, optlist[i].name)) {
|
||||||
setoption(optlist[i].letter, val);
|
setoptionbyindex(i, val);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
error("Illegal option -o %s", name);
|
error("Illegal option -o %s", name);
|
||||||
@ -278,26 +279,32 @@ minus_o(char *name, int val)
|
|||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
setoption(int flag, int val)
|
setoptionbyindex(int idx, int val)
|
||||||
{
|
{
|
||||||
int i;
|
if (optlist[idx].letter == 'p' && !val && privileged) {
|
||||||
|
|
||||||
if (flag == 'p' && !val && privileged) {
|
|
||||||
if (setgid(getgid()) == -1)
|
if (setgid(getgid()) == -1)
|
||||||
error("setgid");
|
error("setgid");
|
||||||
if (setuid(getuid()) == -1)
|
if (setuid(getuid()) == -1)
|
||||||
error("setuid");
|
error("setuid");
|
||||||
}
|
}
|
||||||
|
optlist[idx].val = val;
|
||||||
|
if (val) {
|
||||||
|
/* #%$ hack for ksh semantics */
|
||||||
|
if (optlist[idx].letter == 'V')
|
||||||
|
Eflag = 0;
|
||||||
|
else if (optlist[idx].letter == 'E')
|
||||||
|
Vflag = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
setoption(int flag, int val)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < NOPTS; i++)
|
for (i = 0; i < NOPTS; i++)
|
||||||
if (optlist[i].letter == flag) {
|
if (optlist[i].letter == flag) {
|
||||||
optlist[i].val = val;
|
setoptionbyindex(i, val);
|
||||||
if (val) {
|
|
||||||
/* #%$ hack for ksh semantics */
|
|
||||||
if (flag == 'V')
|
|
||||||
Eflag = 0;
|
|
||||||
else if (flag == 'E')
|
|
||||||
Vflag = 0;
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
error("Illegal option -%c", flag);
|
error("Illegal option -%c", flag);
|
||||||
|
Loading…
Reference in New Issue
Block a user