mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-20 06:50:22 +03:00
virsh: Enforce proper ordering of options
Even though vshCmddefOptParse() tried returning -1 if there was an optional option specification that preceded a required one, it failed to check that for boolean type options and options with VSH_OFLAG_REQ_OPT flag set. On the other hand, it makes sense that VSH_OT_ARGV is specified at the end of the option list. Returning -1 enforces the proper ordering thanks to virsh-synopsis test in 'make check'. Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
parent
11d9dd1ad8
commit
6beb173df7
@ -1073,6 +1073,7 @@ vshCmddefOptParse(const vshCmdDef *cmd, uint32_t *opts_need_arg,
|
||||
if (i > 31)
|
||||
return -1; /* too many options */
|
||||
if (opt->type == VSH_OT_BOOL) {
|
||||
optional = true;
|
||||
if (opt->flags & VSH_OFLAG_REQ)
|
||||
return -1; /* bool options can't be mandatory */
|
||||
continue;
|
||||
@ -1105,12 +1106,14 @@ vshCmddefOptParse(const vshCmdDef *cmd, uint32_t *opts_need_arg,
|
||||
if (opt->flags & VSH_OFLAG_REQ_OPT) {
|
||||
if (opt->flags & VSH_OFLAG_REQ)
|
||||
*opts_required |= 1 << i;
|
||||
else
|
||||
optional = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
*opts_need_arg |= 1 << i;
|
||||
if (opt->flags & VSH_OFLAG_REQ) {
|
||||
if (optional)
|
||||
if (optional && opt->type != VSH_OT_ARGV)
|
||||
return -1; /* mandatory options must be listed first */
|
||||
*opts_required |= 1 << i;
|
||||
} else {
|
||||
|
Loading…
x
Reference in New Issue
Block a user