[libvirt] [PATCH] virsh: distinguish errors between missing argument and wrong option

Guannan Ren gren at redhat.com
Tue Feb 19 08:29:55 UTC 2013


Specifying ':' to suppress the error messages printed by getopt().
Then, distinguish the two types of errors.

Before:
virsh: option requires an argument -- 'c'
error: unsupported option '-?'. See --help.

After:
error: option '-c' requires an argument
error: unsupported option '-x'. See --help.
---
 tools/virsh.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/tools/virsh.c b/tools/virsh.c
index f5a01b3..c0e62eb 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -2919,7 +2919,7 @@ vshParseArgv(vshControl *ctl, int argc, char **argv)
     /* Standard (non-command) options. The leading + ensures that no
      * argument reordering takes place, so that command options are
      * not confused with top-level virsh options. */
-    while ((arg = getopt_long(argc, argv, "+d:hqtc:vVrl:e:", opt, NULL)) != -1) {
+    while ((arg = getopt_long(argc, argv, "+:d:hqtc:vVrl:e:", opt, NULL)) != -1) {
         switch (arg) {
         case 'd':
             if (virStrToLong_i(optarg, NULL, 10, &debug) < 0) {
@@ -2973,8 +2973,14 @@ vshParseArgv(vshControl *ctl, int argc, char **argv)
                 exit(EXIT_FAILURE);
             }
             break;
+        case ':':
+            vshError(ctl, _("option '-%c' requires an argument"), optopt);
+            exit(EXIT_FAILURE);
+        case '?':
+            vshError(ctl, _("unsupported option '-%c'. See --help."), optopt);
+            exit(EXIT_FAILURE);
         default:
-            vshError(ctl, _("unsupported option '-%c'. See --help."), arg);
+            vshError(ctl, _("unknown option"));
             exit(EXIT_FAILURE);
         }
     }
-- 
1.7.11.2




More information about the libvir-list mailing list