Add a check that the default 0 assignment will not mean that an option
is considered to be VSH_OT_BOOL.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
tools/vsh.c | 7 +++++++
tools/vsh.h | 1 +
2 files changed, 8 insertions(+)
diff --git a/tools/vsh.c b/tools/vsh.c
index 61e302f9c8..a3491695b9 100644
--- a/tools/vsh.c
+++ b/tools/vsh.c
@@ -335,6 +335,11 @@ vshCmddefCheckInternals(vshControl *ctl,
virBufferStrcat(&complbuf, opt->name, ", ", NULL);
switch (opt->type) {
+ case VSH_OT_NONE:
+ vshError(ctl, "invalid type 'NONE' of option '%s' of
command '%s'",
+ opt->name, cmd->name);
+ return -1;
+
case VSH_OT_BOOL:
if (opt->completer || opt->completer_flags) {
vshError(ctl, "bool parameter '%s' of command '%s'
has completer set",
@@ -671,6 +676,7 @@ vshCmddefHelp(const vshCmdDef *def)
}
break;
case VSH_OT_ALIAS:
+ case VSH_OT_NONE:
/* aliases are intentionally undocumented */
continue;
}
@@ -713,6 +719,7 @@ vshCmddefHelp(const vshCmdDef *def)
opt->name);
break;
case VSH_OT_ALIAS:
+ case VSH_OT_NONE:
continue;
}
diff --git a/tools/vsh.h b/tools/vsh.h
index 17d7f08dc9..2cc0a62d3f 100644
--- a/tools/vsh.h
+++ b/tools/vsh.h
@@ -85,6 +85,7 @@ typedef enum {
* vshCmdOptType - command option type
*/
typedef enum {
+ VSH_OT_NONE = 0, /* cannary to catch programming errors */
VSH_OT_BOOL, /* optional boolean option */
VSH_OT_STRING, /* optional string option */
VSH_OT_INT, /* optional or mandatory int option */
--
2.44.0