提交 a26ff63a 编写于 作者: M Michal Privoznik

vshCommandOpt: Allow caller avoiding assert()

In the future, completer callbacks will receive partially parsed
command (and thus possibly incomplete). However, we still want
them to use command options fetching APIs we already have (e.g.
vshCommandOpt*()) and at the same time don't report any errors
(nor call any asserts).
Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
Reviewed-by: NJohn Ferlan <jferlan@redhat.com>
上级 69ebc645
......@@ -815,8 +815,8 @@ vshCommandFree(vshCmd *cmd)
* to the option if found, 0 with *OPT set to NULL if the name is
* valid and the option is not required, -1 with *OPT set to NULL if
* the option is required but not present, and assert if NAME is not
* valid (which indicates a programming error). No error messages are
* issued if a value is returned.
* valid (which indicates a programming error) unless cmd->skipChecks
* is set. No error messages are issued if a value is returned.
*/
static int
vshCommandOpt(const vshCmd *cmd, const char *name, vshCmdOpt **opt,
......@@ -828,15 +828,19 @@ vshCommandOpt(const vshCmd *cmd, const char *name, vshCmdOpt **opt,
/* See if option is valid and/or required. */
*opt = NULL;
while (valid) {
assert(valid->name);
if (STREQ(name, valid->name))
break;
valid++;
if (!cmd->skipChecks) {
while (valid && valid->name) {
if (STREQ(name, valid->name))
break;
valid++;
}
assert(valid && (!needData || valid->type != VSH_OT_BOOL));
if (valid->flags & VSH_OFLAG_REQ)
ret = -1;
}
assert(!needData || valid->type != VSH_OT_BOOL);
if (valid->flags & VSH_OFLAG_REQ)
ret = -1;
/* See if option is present on command line. */
while (candidate) {
......
......@@ -188,7 +188,8 @@ struct _vshCmdDef {
struct _vshCmd {
const vshCmdDef *def; /* command definition */
vshCmdOpt *opts; /* list of command arguments */
vshCmd *next; /* next command */
vshCmd *next; /* next command */
bool skipChecks; /* skip validity checks when retrieving opts */
};
/*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册