ash: make set -o and set +o work as in dash/bash.

by Cristian Ionescu-Idbohrn.

function                                             old     new   delta
options                                              565     625     +60
getoptscmd                                           709     698     -11
This commit is contained in:
Denis Vlasenko 2008-05-06 15:30:27 +00:00
parent 380bcfc9f7
commit dddfaff363

View File

@ -9486,7 +9486,7 @@ setparam(char **argv)
* Oh well. Let's mimic that. * Oh well. Let's mimic that.
*/ */
static int static int
minus_o(char *name, int val) plus_minus_o(char *name, int val)
{ {
int i; int i;
@ -9497,13 +9497,15 @@ minus_o(char *name, int val)
return 0; return 0;
} }
} }
ash_msg("illegal option -o %s", name); ash_msg("illegal option %co %s", val ? '-' : '+', name);
return 1; return 1;
} }
out1str("Current option settings\n");
for (i = 0; i < NOPTS; i++) for (i = 0; i < NOPTS; i++)
out1fmt("%-16s%s\n", optnames(i), if (val) {
optlist[i] ? "on" : "off"); out1fmt("%-16s%s\n", optnames(i), optlist[i] ? "on" : "off");
} else {
out1fmt("set %co %s\n", optlist[i] ? '-' : '+', optnames(i));
}
return 0; return 0;
} }
static void static void
@ -9517,7 +9519,7 @@ setoption(int flag, int val)
return; return;
} }
} }
ash_msg_and_raise_error("illegal option -%c", flag); ash_msg_and_raise_error("illegal option %c%c", val ? '-' : '+', flag);
/* NOTREACHED */ /* NOTREACHED */
} }
static int static int
@ -9555,7 +9557,7 @@ options(int cmdline)
if (c == 'c' && cmdline) { if (c == 'c' && cmdline) {
minusc = p; /* command is after shell args */ minusc = p; /* command is after shell args */
} else if (c == 'o') { } else if (c == 'o') {
if (minus_o(*argptr, val)) { if (plus_minus_o(*argptr, val)) {
/* it already printed err message */ /* it already printed err message */
return 1; /* error */ return 1; /* error */
} }