Hi,
When I specified -t (or -q) option with virsh command, the result is
something wrong.
It is likely to be caused by the way to parse the virsh options.
(example)
I would like to know the node information with timing information.
So, I try some cases.
1) virsh with "-t nodeinfo"
ran virsh interactive terminal. Hmm, I didn't expect that...
# virsh -t nodeinfo
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
'quit' to quit
virsh #
2) virsh with "-t aa nodeinfo"
I got the node information with timing information. But what does
"aa" option mean?? (Of course no meaning.)
# virsh -t aa nodeinfo
CPU model: i686
CPU(s): 2
CPU frequency: 1828 MHz
CPU socket(s): 1
Core(s) per socket: 2
Thread(s) per core: 1
NUMA cell(s): 1
Memory size: 1037312 kB
(Time: 2.821 ms)
3) virsh with "-t tt nodeinfo"
ran virsh interactive terminal. What's the difference with "aa"?
# virsh -t tt nodeinfo
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
'quit' to quit
virsh #
I think the cause is missing a conditional before getopt_long at
vshParseArgv and add to check whether "o->has_arg" is 1 or not.
After the fix, I can use virsh options normally.
(example)
1) virsh with "-t nodeinfo"
# ./virsh -t nodeinfo
CPU model: i686
CPU(s): 2
CPU frequency: 1828 MHz
CPU socket(s): 1
Core(s) per socket: 2
Thread(s) per core: 1
NUMA cell(s): 1
Memory size: 1037312 kB
(Time: 2.626 ms)
2) virsh with "-t aa nodeinfo"
# ./virsh -t aa nodeinfo
error: unknown command: 'aa'
3) virsh with "-t tt nodeinfo"
# ./virsh -t tt nodeinfo
error: unknown command: 'tt'
Signed-off-by: Saori Fukuta <fukuta.saori(a)jp.fujitsu.com>
Thanks,
Saori Fukuta.
Index: virsh.c
===================================================================
RCS file: /data/cvs/libvirt/src/virsh.c,v
retrieving revision 1.55
diff -u -p -r1.55 virsh.c
--- virsh.c 23 Feb 2007 10:27:53 -0000 1.55
+++ virsh.c 27 Feb 2007 07:35:28 -0000
@@ -3344,12 +3344,14 @@ vshParseArgv(vshControl * ctl, int argc,
int sz = strlen(last);
for (o = opt; o->name; o++) {
- if (sz == 2 && *(last + 1) == o->val)
- /* valid virsh short option */
- valid = TRUE;
- else if (sz > 2 && strcmp(o->name, last + 2) == 0)
- /* valid virsh long option */
- valid = TRUE;
+ if (o->has_arg == 1){
+ if (sz == 2 && *(last + 1) == o->val)
+ /* valid virsh short option */
+ valid = TRUE;
+ else if (sz > 2 && strcmp(o->name, last + 2) == 0)
+ /* valid virsh long option */
+ valid = TRUE;
+ }
}
}
if (!valid) {