[libvirt] [PATCHv2 4/5] virsh: domain: Split out code to lookup domain from string

Peter Krempa pkrempa at redhat.com
Tue Aug 26 14:14:52 UTC 2014


Split out guts of the function to reuse it to get domain objects from
string.
---
 tools/virsh-domain.c | 80 +++++++++++++++++++++++++++++++++-------------------
 tools/virsh-domain.h |  4 +++
 2 files changed, 55 insertions(+), 29 deletions(-)

diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 2562326..b28de5a 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -60,57 +60,79 @@
 # define SA_SIGINFO 0
 #endif

-virDomainPtr
-vshCommandOptDomainBy(vshControl *ctl, const vshCmd *cmd,
-                      const char **name, unsigned int flags)
+
+static virDomainPtr
+vshLookupDomainInternal(vshControl *ctl,
+                        const char *cmdname,
+                        const char *name,
+                        unsigned int flags)
 {
     virDomainPtr dom = NULL;
-    const char *n = NULL;
     int id;
-    const char *optname = "domain";
     virCheckFlags(VSH_BYID | VSH_BYUUID | VSH_BYNAME, NULL);

-    if (!vshCmdHasOption(ctl, cmd, optname))
-        return NULL;
-
-    if (vshCommandOptStringReq(ctl, cmd, optname, &n) < 0)
-        return NULL;
-
-    vshDebug(ctl, VSH_ERR_INFO, "%s: found option <%s>: %s\n",
-             cmd->def->name, optname, n);
-
-    if (name)
-        *name = n;
-
     /* try it by ID */
     if (flags & VSH_BYID) {
-        if (virStrToLong_i(n, NULL, 10, &id) == 0 && id >= 0) {
-            vshDebug(ctl, VSH_ERR_DEBUG,
-                     "%s: <%s> seems like domain ID\n",
-                     cmd->def->name, optname);
+        if (virStrToLong_i(name, NULL, 10, &id) == 0 && id >= 0) {
+            vshDebug(ctl, VSH_ERR_DEBUG, "%s: <domain> looks like ID\n",
+                     cmdname);
             dom = virDomainLookupByID(ctl->conn, id);
         }
     }
+
     /* try it by UUID */
     if (!dom && (flags & VSH_BYUUID) &&
-        strlen(n) == VIR_UUID_STRING_BUFLEN-1) {
-        vshDebug(ctl, VSH_ERR_DEBUG, "%s: <%s> trying as domain UUID\n",
-                 cmd->def->name, optname);
-        dom = virDomainLookupByUUIDString(ctl->conn, n);
+        strlen(name) == VIR_UUID_STRING_BUFLEN-1) {
+        vshDebug(ctl, VSH_ERR_DEBUG, "%s: <domain> trying as domain UUID\n",
+                 cmdname);
+        dom = virDomainLookupByUUIDString(ctl->conn, name);
     }
+
     /* try it by NAME */
     if (!dom && (flags & VSH_BYNAME)) {
-        vshDebug(ctl, VSH_ERR_DEBUG, "%s: <%s> trying as domain NAME\n",
-                 cmd->def->name, optname);
-        dom = virDomainLookupByName(ctl->conn, n);
+        vshDebug(ctl, VSH_ERR_DEBUG, "%s: <domain> trying as domain NAME\n",
+                 cmdname);
+        dom = virDomainLookupByName(ctl->conn, name);
     }

     if (!dom)
-        vshError(ctl, _("failed to get domain '%s'"), n);
+        vshError(ctl, _("failed to get domain '%s'"), name);

     return dom;
 }

+
+virDomainPtr
+vshLookupDomainBy(vshControl *ctl,
+                  const char *name,
+                  unsigned int flags)
+{
+    return vshLookupDomainInternal(ctl, "unknown", name, flags);
+}
+
+
+virDomainPtr
+vshCommandOptDomainBy(vshControl *ctl, const vshCmd *cmd,
+                      const char **name, unsigned int flags)
+{
+    const char *n = NULL;
+    const char *optname = "domain";
+
+    if (!vshCmdHasOption(ctl, cmd, optname))
+        return NULL;
+
+    if (vshCommandOptStringReq(ctl, cmd, optname, &n) < 0)
+        return NULL;
+
+    vshDebug(ctl, VSH_ERR_INFO, "%s: found option <%s>: %s\n",
+             cmd->def->name, optname, n);
+
+    if (name)
+        *name = n;
+
+    return vshLookupDomainInternal(ctl, cmd->def->name, n, flags);
+}
+
 VIR_ENUM_DECL(vshDomainVcpuState)
 VIR_ENUM_IMPL(vshDomainVcpuState,
               VIR_VCPU_LAST,
diff --git a/tools/virsh-domain.h b/tools/virsh-domain.h
index f03a0bb..f46538f 100644
--- a/tools/virsh-domain.h
+++ b/tools/virsh-domain.h
@@ -28,6 +28,10 @@

 # include "virsh.h"

+virDomainPtr vshLookupDomainBy(vshControl *ctl,
+                               const char *name,
+                               unsigned int flags);
+
 virDomainPtr vshCommandOptDomainBy(vshControl *ctl, const vshCmd *cmd,
                                    const char **name, unsigned int flags);

-- 
2.0.2




More information about the libvir-list mailing list