[libvirt] [PATCH] virsh: allow empty string arguments

Eric Blake eblake at redhat.com
Mon Mar 14 16:46:07 UTC 2011


"virsh connect ''" should try to connect to the default connection,
but the previous patch made it issue a warning about an invalid URI.

* tools/virsh.c (VSH_OFLAG_EMPTY_OK): New option flag.
(vshCommandOptString): Per the declaration, value is required to
be non-NULL.  Honor new flag.
(opts_connect): Allow empty string connection.
---
 tools/virsh.c |   22 +++++++++++++---------
 1 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/tools/virsh.c b/tools/virsh.c
index 42ebd55..ef0cfea 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -152,8 +152,9 @@ typedef enum {
 /*
  * Command Option Flags
  */
-#define VSH_OFLAG_NONE    0     /* without flags */
-#define VSH_OFLAG_REQ    (1 << 1)       /* option required */
+#define VSH_OFLAG_NONE      0     /* without flags */
+#define VSH_OFLAG_REQ       (1 << 1)       /* option required */
+#define VSH_OFLAG_EMPTY_OK  (1 << 2)       /* empty string option allowed */

 /* dummy */
 typedef struct __vshControl vshControl;
@@ -685,7 +686,8 @@ static const vshCmdInfo info_connect[] = {
 };

 static const vshCmdOptDef opts_connect[] = {
-    {"name",     VSH_OT_DATA, 0, N_("hypervisor connection URI")},
+    {"name",     VSH_OT_DATA, VSH_OFLAG_EMPTY_OK,
+     N_("hypervisor connection URI")},
     {"readonly", VSH_OT_BOOL, 0, N_("read-only connection")},
     {NULL, 0, 0, NULL}
 };
@@ -10993,14 +10995,16 @@ vshCommandOptString(const vshCmd *cmd, const char *name, const char **value)
     int ret = 0;

     if (arg && arg->data) {
-        ret = -1;
-        if (*arg->data) {
-            if (value) {
-                *value = arg->data;
-                ret = 1;
-            }
+        if (*arg->data
+            || (arg->def && (arg->def->flag & VSH_OFLAG_EMPTY_OK))) {
+            *value = arg->data;
+            ret = 1;
         } else if (arg->def && ((arg->def->flag) & VSH_OFLAG_REQ)) {
             vshError(NULL, _("Missing required option '%s'"), name);
+            ret = -1;
+        } else {
+            /* Treat "--option ''" as if option had not been specified. */
+            ret = 0;
         }
     }

-- 
1.7.4




More information about the libvir-list mailing list