[libvirt] [PATCH] remove redundant optname arguments

Jim Meyering jim at meyering.net
Fri Dec 12 16:45:28 UTC 2008


>From a5c76721c22cf51b47059a91317f87a9f47c6868 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering at redhat.com>
Date: Tue, 9 Dec 2008 22:22:08 +0100
Subject: [PATCH] remove redundant optname arguments

This is the second part of the change mentioned here:

  http://thread.gmane.org/gmane.comp.emulators.libvirt/10331

It removes the essentially redundant "optname" parameter
from each of the vshCommandOptNetworkBy and vshCommandOptDomainBy
functions as well as the correspond macros (without "By" suffix).
Now, instead of always passing the optname, "domain", to
vshCommandOptDomainBy, that function requires that its command
argument refer to an opts array containing a "domain" option.

This normalization makes one more help-related change:
it renames the net-start "name" argument to the more
sensible and consistent "network".
* src/virsh.c (VSH_BYNAME, vshCommandOptDomain)
(cmd_has_option): New function, used in vshCommandOptDomainBy
and vshCommandOptNetworkBy.
(vshCommandOptDomainBy, vshCommandOptNetworkBy): Remove the optname
parameter, it's always "domain" ("network").  Update all callers.
Call cmd_has_option.
(vshCommandOptNetwork, cmdAutostart, cmdConsole, cmdDomstate)
(cmdDomblkstat, cmdDomIfstat, cmdSuspend, cmdUndefine, cmdStart)
(cmdSave, cmdSchedinfo, cmdDump, cmdResume, cmdShutdown)
(cmdReboot, cmdDestroy, cmdDominfo, cmdVcpuinfo, cmdVcpupin)
(cmdSetvcpus, cmdSetmem, cmdSetmaxmem, cmdDumpXML, cmdDomname)
(cmdDomid, cmdDomuuid, cmdMigrate, cmdNetworkAutostart)
(cmdNetworkDestroy, cmdNetworkDumpXML, cmdNetworkName)
(opts_network_start, cmdNetworkStart, cmdNetworkUndefine)
(cmdNetworkUuid, cmdVNCDisplay, cmdTTYConsole, cmdAttachDevice)
(cmdDetachDevice, cmdAttachInterface, cmdDetachInterface)
(cmdAttachDisk, cmdDetachDisk, cmdEdit)
* src/Makefile.am (virsh-pool-edit.c): This code is generated
from cmdEdit, and cmdEdit uses the vshCommandOptDomain macro which
now, with the changes above, has only 3 (was 4) arguments, yet the
macro use is mapped to vshCommandOptPool, which still requires 4
arguments.  So this change adjusts the sed code to reinsert the
just-removed argument -- we're not changing pool-related code right
now, because it's not as straight-forward.
---
 src/Makefile.am |    1 +
 src/virsh.c     |  132 +++++++++++++++++++++++++++++++++----------------------
 2 files changed, 81 insertions(+), 52 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am
index c32a1d4..2053528 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -461,6 +461,7 @@ virsh-pool-edit.c: virsh.c Makefile.am
 	  | sed -e 's/domain/pool/g' \
 	      -e 's/vshCommandOptDomain/vshCommandOptPool/g' \
 	      -e 's/Domain %s/Pool %s/g' \
+	      -e 's/(ctl, cmd, NULL);/(ctl, cmd, "pool", NULL);/' \
 	      -e 's/Domain/StoragePool/g' \
 	      -e 's/cmdEdit/cmdPoolEdit/g' \
 	      -e 's/\(virStoragePoolDefineXML.*\));/\1, 0);/' \
diff --git a/src/virsh.c b/src/virsh.c
index f4a57f4..7828272 100644
--- a/src/virsh.c
+++ b/src/virsh.c
@@ -246,19 +246,18 @@ static int vshCommandOptBool(const vshCmd *cmd, const char *name);
 #define VSH_BYNAME   (1 << 3)

 static virDomainPtr vshCommandOptDomainBy(vshControl *ctl, const vshCmd *cmd,
-                                          const char *optname, char **name, int flag);
+                                          char **name, int flag);

 /* default is lookup by Id, Name and UUID */
-#define vshCommandOptDomain(_ctl, _cmd, _optname, _name)            \
-    vshCommandOptDomainBy(_ctl, _cmd, _optname, _name,              \
-                          VSH_BYID|VSH_BYUUID|VSH_BYNAME)
+#define vshCommandOptDomain(_ctl, _cmd, _name)                      \
+    vshCommandOptDomainBy(_ctl, _cmd, _name, VSH_BYID|VSH_BYUUID|VSH_BYNAME)

 static virNetworkPtr vshCommandOptNetworkBy(vshControl *ctl, const vshCmd *cmd,
-                            const char *optname, char **name, int flag);
+                                            char **name, int flag);

 /* default is lookup by Name and UUID */
-#define vshCommandOptNetwork(_ctl, _cmd, _optname, _name)           \
-    vshCommandOptNetworkBy(_ctl, _cmd, _optname, _name,             \
+#define vshCommandOptNetwork(_ctl, _cmd, _name)                    \
+    vshCommandOptNetworkBy(_ctl, _cmd, _name,                      \
                            VSH_BYUUID|VSH_BYNAME)

 static virStoragePoolPtr vshCommandOptPoolBy(vshControl *ctl, const vshCmd *cmd,
@@ -386,7 +385,7 @@ cmdAutostart(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", &name)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, &name)))
         return FALSE;

     autostart = !vshCommandOptBool(cmd, "disable");
@@ -488,7 +487,7 @@ cmdConsole(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", NULL)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         return FALSE;

     doc = virDomainGetXMLDesc(dom, 0);
@@ -675,7 +674,7 @@ cmdDomstate(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", NULL)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         return FALSE;

     if (virDomainGetInfo(dom, &info) == 0)
@@ -712,7 +711,7 @@ cmdDomblkstat (vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability (ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain (ctl, cmd, "domain", &name)))
+    if (!(dom = vshCommandOptDomain (ctl, cmd, &name)))
         return FALSE;

     if (!(device = vshCommandOptString (cmd, "device", NULL)))
@@ -768,7 +767,7 @@ cmdDomIfstat (vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability (ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain (ctl, cmd, "domain", &name)))
+    if (!(dom = vshCommandOptDomain (ctl, cmd, &name)))
         return FALSE;

     if (!(device = vshCommandOptString (cmd, "interface", NULL)))
@@ -833,7 +832,7 @@ cmdSuspend(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", &name)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, &name)))
         return FALSE;

     if (virDomainSuspend(dom) == 0) {
@@ -979,7 +978,7 @@ cmdUndefine(vshControl *ctl, const vshCmd *cmd)
         virDomainFree(dom);
         return FALSE;
     }
-    if (!(dom = vshCommandOptDomainBy(ctl, cmd, "domain", &name,
+    if (!(dom = vshCommandOptDomainBy(ctl, cmd, &name,
                                       VSH_BYNAME|VSH_BYUUID)))
         return FALSE;

@@ -1018,7 +1017,7 @@ cmdStart(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomainBy(ctl, cmd, "domain", NULL, VSH_BYNAME)))
+    if (!(dom = vshCommandOptDomainBy(ctl, cmd, NULL, VSH_BYNAME)))
         return FALSE;

     if (virDomainGetID(dom) != (unsigned int)-1) {
@@ -1068,7 +1067,7 @@ cmdSave(vshControl *ctl, const vshCmd *cmd)
     if (!(to = vshCommandOptString(cmd, "file", NULL)))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", &name)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, &name)))
         return FALSE;

     if (virDomainSave(dom, to) == 0) {
@@ -1124,7 +1123,7 @@ cmdSchedinfo(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", NULL)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         return FALSE;

     /* Deprecated Xen-only options */
@@ -1330,7 +1329,7 @@ cmdDump(vshControl *ctl, const vshCmd *cmd)
     if (!(to = vshCommandOptString(cmd, "file", NULL)))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", &name)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, &name)))
         return FALSE;

     if (virDomainCoreDump(dom, to, 0) == 0) {
@@ -1369,7 +1368,7 @@ cmdResume(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", &name)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, &name)))
         return FALSE;

     if (virDomainResume(dom) == 0) {
@@ -1407,7 +1406,7 @@ cmdShutdown(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", &name)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, &name)))
         return FALSE;

     if (virDomainShutdown(dom) == 0) {
@@ -1445,7 +1444,7 @@ cmdReboot(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", &name)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, &name)))
         return FALSE;

     if (virDomainReboot(dom, 0) == 0) {
@@ -1483,7 +1482,7 @@ cmdDestroy(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", &name)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, &name)))
         return FALSE;

     if (virDomainDestroy(dom) == 0) {
@@ -1523,7 +1522,7 @@ cmdDominfo(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", NULL)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         return FALSE;

     id = virDomainGetID(dom);
@@ -1648,7 +1647,7 @@ cmdVcpuinfo(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", NULL)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         return FALSE;

     if (virNodeGetInfo(ctl->conn, &nodeinfo) != 0) {
@@ -1739,7 +1738,7 @@ cmdVcpupin(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", NULL)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         return FALSE;

     vcpu = vshCommandOptInt(cmd, "vcpu", &vcpufound);
@@ -1864,7 +1863,7 @@ cmdSetvcpus(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", NULL)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         return FALSE;

     count = vshCommandOptInt(cmd, "count", &count);
@@ -1920,7 +1919,7 @@ cmdSetmem(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", NULL)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         return FALSE;

     kilobytes = vshCommandOptInt(cmd, "kilobytes", &kilobytes);
@@ -1976,7 +1975,7 @@ cmdSetmaxmem(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", NULL)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         return FALSE;

     kilobytes = vshCommandOptInt(cmd, "kilobytes", &kilobytes);
@@ -2093,7 +2092,7 @@ cmdDumpXML(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", NULL)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         return FALSE;

     dump = virDomainGetXMLDesc(dom, 0);
@@ -2129,7 +2128,7 @@ cmdDomname(vshControl *ctl, const vshCmd *cmd)

     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;
-    if (!(dom = vshCommandOptDomainBy(ctl, cmd, "domain", NULL,
+    if (!(dom = vshCommandOptDomainBy(ctl, cmd, NULL,
                                       VSH_BYID|VSH_BYUUID)))
         return FALSE;

@@ -2160,7 +2159,7 @@ cmdDomid(vshControl *ctl, const vshCmd *cmd)

     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;
-    if (!(dom = vshCommandOptDomainBy(ctl, cmd, "domain", NULL,
+    if (!(dom = vshCommandOptDomainBy(ctl, cmd, NULL,
                                       VSH_BYNAME|VSH_BYUUID)))
         return FALSE;

@@ -2195,7 +2194,7 @@ cmdDomuuid(vshControl *ctl, const vshCmd *cmd)

     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;
-    if (!(dom = vshCommandOptDomainBy(ctl, cmd, "domain", NULL,
+    if (!(dom = vshCommandOptDomainBy(ctl, cmd, NULL,
                                       VSH_BYNAME|VSH_BYID)))
         return FALSE;

@@ -2240,7 +2239,7 @@ cmdMigrate (vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability (ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain (ctl, cmd, "domain", NULL)))
+    if (!(dom = vshCommandOptDomain (ctl, cmd, NULL)))
         return FALSE;

     desturi = vshCommandOptString (cmd, "desturi", &found);
@@ -2301,7 +2300,7 @@ cmdNetworkAutostart(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(network = vshCommandOptNetwork(ctl, cmd, "network", &name)))
+    if (!(network = vshCommandOptNetwork(ctl, cmd, &name)))
         return FALSE;

     autostart = !vshCommandOptBool(cmd, "disable");
@@ -2443,7 +2442,7 @@ cmdNetworkDestroy(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(network = vshCommandOptNetwork(ctl, cmd, "network", &name)))
+    if (!(network = vshCommandOptNetwork(ctl, cmd, &name)))
         return FALSE;

     if (virNetworkDestroy(network) == 0) {
@@ -2482,7 +2481,7 @@ cmdNetworkDumpXML(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(network = vshCommandOptNetwork(ctl, cmd, "network", NULL)))
+    if (!(network = vshCommandOptNetwork(ctl, cmd, NULL)))
         return FALSE;

     dump = virNetworkGetXMLDesc(network, 0);
@@ -2642,7 +2641,7 @@ cmdNetworkName(vshControl *ctl, const vshCmd *cmd)

     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;
-    if (!(network = vshCommandOptNetworkBy(ctl, cmd, "network", NULL,
+    if (!(network = vshCommandOptNetworkBy(ctl, cmd, NULL,
                                            VSH_BYUUID)))
         return FALSE;

@@ -2662,7 +2661,7 @@ static const vshCmdInfo info_network_start[] = {
 };

 static const vshCmdOptDef opts_network_start[] = {
-    {"name", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("name of the inactive network")},
+    {"network", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("name of the inactive network")},
     {NULL, 0, 0, NULL}
 };

@@ -2675,7 +2674,7 @@ cmdNetworkStart(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(network = vshCommandOptNetworkBy(ctl, cmd, "name", NULL, VSH_BYNAME)))
+    if (!(network = vshCommandOptNetworkBy(ctl, cmd, NULL, VSH_BYNAME)))
          return FALSE;

     if (virNetworkCreate(network) == 0) {
@@ -2714,7 +2713,7 @@ cmdNetworkUndefine(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(network = vshCommandOptNetwork(ctl, cmd, "network", &name)))
+    if (!(network = vshCommandOptNetwork(ctl, cmd, &name)))
         return FALSE;

     if (virNetworkUndefine(network) == 0) {
@@ -2751,7 +2750,7 @@ cmdNetworkUuid(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(network = vshCommandOptNetworkBy(ctl, cmd, "network", NULL,
+    if (!(network = vshCommandOptNetworkBy(ctl, cmd, NULL,
                                            VSH_BYNAME)))
         return FALSE;

@@ -4527,7 +4526,7 @@ cmdVNCDisplay(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", NULL)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         return FALSE;

     doc = virDomainGetXMLDesc(dom, 0);
@@ -4601,7 +4600,7 @@ cmdTTYConsole(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", NULL)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         return FALSE;

     doc = virDomainGetXMLDesc(dom, 0);
@@ -4661,7 +4660,7 @@ cmdAttachDevice(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", NULL)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         return FALSE;

     from = vshCommandOptString(cmd, "file", &found);
@@ -4719,7 +4718,7 @@ cmdDetachDevice(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         return FALSE;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", NULL)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         return FALSE;

     from = vshCommandOptString(cmd, "file", &found);
@@ -4780,7 +4779,7 @@ cmdAttachInterface(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         goto cleanup;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", NULL)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         goto cleanup;

     if (!(type = vshCommandOptString(cmd, "type", NULL)))
@@ -4899,7 +4898,7 @@ cmdDetachInterface(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         goto cleanup;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", NULL)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         goto cleanup;

     if (!(type = vshCommandOptString(cmd, "type", NULL)))
@@ -5017,7 +5016,7 @@ cmdAttachDisk(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         goto cleanup;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", NULL)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         goto cleanup;

     if (!(source = vshCommandOptString(cmd, "source", NULL)))
@@ -5181,7 +5180,7 @@ cmdDetachDisk(vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         goto cleanup;

-    if (!(dom = vshCommandOptDomain(ctl, cmd, "domain", NULL)))
+    if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         goto cleanup;

     if (!(target = vshCommandOptString(cmd, "target", NULL)))
@@ -5410,7 +5409,7 @@ cmdEdit (vshControl *ctl, const vshCmd *cmd)
     if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
         goto cleanup;

-    dom = vshCommandOptDomain (ctl, cmd, "domain", NULL);
+    dom = vshCommandOptDomain (ctl, cmd, NULL);
     if (dom == NULL)
         goto cleanup;

@@ -5912,14 +5911,40 @@ vshCommandOptBool(const vshCmd *cmd, const char *name)
     return vshCommandOpt(cmd, name) ? TRUE : FALSE;
 }

+/* Determine whether CMD->opts includes an option with name OPTNAME.
+   If not, give a diagnostic and return false.
+   If so, return true.  */
+static bool
+cmd_has_option (vshControl *ctl, const vshCmd *cmd, const char *optname)
+{
+    /* Iterate through cmd->opts, to ensure that there is an entry
+       with name OPTNAME and type VSH_OT_DATA. */
+    bool found = false;
+    const vshCmdOpt *opt;
+    for (opt = cmd->opts; opt; opt = opt->next) {
+        if (STREQ (opt->def->name, optname) && opt->def->type == VSH_OT_DATA) {
+            found = true;
+            break;
+        }
+    }
+
+    if (!found)
+        vshError(ctl, FALSE,
+                 _("internal error: virsh %s: no %s VSH_OT_DATA option"),
+                 cmd->def->name, optname);
+    return found;
+}

 static virDomainPtr
-vshCommandOptDomainBy(vshControl *ctl, const vshCmd *cmd, const char *optname,
+vshCommandOptDomainBy(vshControl *ctl, const vshCmd *cmd,
                       char **name, int flag)
 {
     virDomainPtr dom = NULL;
     char *n;
     int id;
+    const char *optname = "domain";
+    if (!cmd_has_option (ctl, cmd, optname))
+        return NULL;

     if (!(n = vshCommandOptString(cmd, optname, NULL))) {
         vshError(ctl, FALSE, "%s", _("undefined domain name or id"));
@@ -5960,11 +5985,14 @@ vshCommandOptDomainBy(vshControl *ctl, const vshCmd *cmd, const char *optname,
 }

 static virNetworkPtr
-vshCommandOptNetworkBy(vshControl *ctl, const vshCmd *cmd, const char *optname,
+vshCommandOptNetworkBy(vshControl *ctl, const vshCmd *cmd,
                        char **name, int flag)
 {
     virNetworkPtr network = NULL;
     char *n;
+    const char *optname = "network";
+    if (!cmd_has_option (ctl, cmd, optname))
+        return NULL;

     if (!(n = vshCommandOptString(cmd, optname, NULL))) {
         vshError(ctl, FALSE, "%s", _("undefined network name"));
--
1.6.0.4.1044.g77718




More information about the libvir-list mailing list