On 06/13/2011 04:47 PM, Daniel P. Berrange wrote:
On Tue, Jun 07, 2011 at 05:11:10PM +0800, Lai Jiangshan wrote:
> A VSH_OFLAG_REQ_OPT option means --optionname is required when used.
> It will kill any ambiguity even !VSH_OFLAG_REQ option listed before
> VSH_OFLAG_REQ option if the !VSH_OFLAG_REQ option is a VSH_OFLAG_REQ_OPT option.
>
> It will help us use optional arguement with VSH_OT_ARGV argument.
s/arguement/argument/
>
> Signed-off-by: Lai Jiangshan <laijs(a)cn.fujitsu.com>
> ---
> tools/virsh.c | 7 +++++++
> 1 files changed, 7 insertions(+), 0 deletions(-)
>
> diff --git a/tools/virsh.c b/tools/virsh.c
> index 638029c..d13c12b 100644
> --- a/tools/virsh.c
> +++ b/tools/virsh.c
> @@ -152,6 +152,7 @@ enum {
> VSH_OFLAG_NONE = 0, /* without flags */
> VSH_OFLAG_REQ = (1 << 0), /* option required */
> VSH_OFLAG_EMPTY_OK = (1 << 1), /* empty string option allowed */
> + VSH_OFLAG_REQ_OPT = (1 << 2), /* --optionname required */
> };
>
> /* dummy */
> @@ -11375,6 +11376,12 @@ vshCmddefOptParse(const vshCmdDef *cmd, uint32_t*
opts_need_arg,
> return -1; /* bool options can't be mandatory */
> continue;
> }
> + if (opt->flag & VSH_OFLAG_REQ_OPT) {
> + if (opt->flag & VSH_OFLAG_REQ)
> + *opts_required |= 1 << i;
> + continue;
> + }
> +
I had to look ahead to patch 9/10 to see where this was used, but it
makes sense now:
virsh send-key domain linux 37 18 21
would be problematic (since the parser would try to associate linux as
the first var-arg, but var-arg wants only keycodes), while:
virsh send-key domain --codeset linux 37 18 21
makes it obvious that the --codeset was required for proper parsing.
All because send-key, unlike echo, must have at least one keycode arg.
If I'm not mistaken, this also means:
virsh send-key domain 37 18 21 --codeset linux
works (which is fine by me), whereas:
virsh send-key domain -- 37 18 21 --codeset linux
tries to parse "--codeset" and "linux" as keycodes.
> *opts_need_arg |= 1 << i;
> if (opt->flag & VSH_OFLAG_REQ) {
> if (optional)
ACK
Pushed (note that 2/10 is still unpushed, while waiting for an ACK on my
v2 variant to address review comments on v1).
--
Eric Blake eblake(a)redhat.com +1-801-349-2682
Libvirt virtualization library
http://libvirt.org