Allow choice options (multiple states) to be toggled between states 0

and 1.
This commit is contained in:
nicm 2015-04-24 21:38:18 +00:00
parent a5a873dccc
commit 5a2d0533a8
1 changed files with 27 additions and 15 deletions

View File

@ -289,10 +289,16 @@ cmd_set_option_set(struct cmd *self, struct cmd_q *cmdq,
{
struct options_entry *o;
if (oe->type != OPTIONS_TABLE_FLAG && value == NULL) {
switch (oe->type) {
case OPTIONS_TABLE_FLAG:
case OPTIONS_TABLE_CHOICE:
break;
default:
if (value == NULL) {
cmdq_error(cmdq, "empty value");
return (-1);
}
}
o = NULL;
switch (oe->type) {
@ -455,6 +461,11 @@ cmd_set_option_choice(unused struct cmd *self, struct cmd_q *cmdq,
const char **choicep;
int n, choice = -1;
if (value == NULL) {
choice = options_get_number(oo, oe->name);
if (choice < 2)
choice = !choice;
} else {
n = 0;
for (choicep = oe->choices; *choicep != NULL; choicep++) {
n++;
@ -471,6 +482,7 @@ cmd_set_option_choice(unused struct cmd *self, struct cmd_q *cmdq,
cmdq_error(cmdq, "unknown value: %s", value);
return (NULL);
}
}
return (options_set_number(oo, oe->name, choice));
}