[libvirt] [PATCH] virsh: supply long option for -V

Eric Blake eblake at redhat.com
Tue Nov 9 20:50:31 UTC 2010


* tools/virsh.c (vshParseArgv): Use NULL instead of 0 for pointer,
and symbolic names for has_arg.  Give --version an optional arg.
(vshUsage): Document this.
* tools/virsh.pod: Likewise.
---

Technically, this treats '--version=anything' as -v, so that only
'--version=long' is -V; if you want, I can spin a V2 that requires
that optarg be exactly NULL, "short", or "long", rather than letting
anything go, but I didn't think it was worth it.

 tools/virsh.c   |   31 +++++++++++++++++--------------
 tools/virsh.pod |    4 ++--
 2 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/tools/virsh.c b/tools/virsh.c
index 26d7f5a..5caa46e 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -11524,8 +11524,8 @@ vshUsage(void)
                       "    -q | --quiet            quiet mode\n"
                       "    -t | --timing           print timing information\n"
                       "    -l | --log <file>       output logging to file\n"
-                      "    -v | --version          program version\n\n"
-                      "    -V                      version and full options\n\n"
+                      "    -v | --version[=short]  program version\n\n"
+                      "    -V | --version=long     version and full options\n\n"
                       "  commands (non interactive mode):\n"), progname, progname);

     for (cmd = commands; cmd->name; cmd++)
@@ -11670,15 +11670,15 @@ vshParseArgv(vshControl *ctl, int argc, char **argv)
     bool help = false;
     int arg;
     struct option opt[] = {
-        {"debug", 1, 0, 'd'},
-        {"help", 0, 0, 'h'},
-        {"quiet", 0, 0, 'q'},
-        {"timing", 0, 0, 't'},
-        {"version", 0, 0, 'v'},
-        {"connect", 1, 0, 'c'},
-        {"readonly", 0, 0, 'r'},
-        {"log", 1, 0, 'l'},
-        {0, 0, 0, 0}
+        {"debug", required_argument, NULL, 'd'},
+        {"help", no_argument, NULL, 'h'},
+        {"quiet", no_argument, NULL, 'q'},
+        {"timing", no_argument, NULL, 't'},
+        {"version", optional_argument, NULL, 'v'},
+        {"connect", required_argument, NULL, 'c'},
+        {"readonly", no_argument, NULL, 'r'},
+        {"log", required_argument, NULL, 'l'},
+        {NULL, 0, NULL, 0}
     };

     /* Standard (non-command) options. The leading + ensures that no
@@ -11704,12 +11704,15 @@ vshParseArgv(vshControl *ctl, int argc, char **argv)
         case 'c':
             ctl->name = vshStrdup(ctl, optarg);
             break;
+        case 'v':
+            if (STRNEQ_NULLABLE(optarg, "long")) {
+                puts(VERSION);
+                exit(EXIT_SUCCESS);
+            }
+            /* fall through */
         case 'V':
             vshShowVersion(ctl);
             exit(EXIT_SUCCESS);
-        case 'v':
-            puts(VERSION);
-            exit(EXIT_SUCCESS);
         case 'r':
             ctl->readonly = TRUE;
             break;
diff --git i/tools/virsh.pod w/tools/virsh.pod
index 4f3f220..6bfae09 100644
--- i/tools/virsh.pod
+++ w/tools/virsh.pod
@@ -54,12 +54,12 @@ The B<virsh> program understands the following I<OPTIONS>.
 Ignore all other arguments, and behave as if the B<help> command were
 given instead.

-=item B<-v>, B<--version>
+=item B<-v>, B<--version>[=short]

 Ignore all other arguments, and prints the version of the libvirt library
 virsh is coming from

-=item B<-V>
+=item B<-V>, B<--version=long>

 Ignore all other arguments, and prints the version of the libvirt library
 virsh is coming from and which options and driver are compiled in.
-- 
1.7.3.2




More information about the libvir-list mailing list