[libvirt] [PATCH 5/8] virsh-snapshot: Refactor cmdSnapshotCurrent

Peter Krempa pkrempa at redhat.com
Thu Mar 7 12:53:04 UTC 2013


Use the exclusive parameter checker and touch up some parts to simplify
code.
---
 tools/virsh-snapshot.c | 46 +++++++++++++++++++++-------------------------
 1 file changed, 21 insertions(+), 25 deletions(-)

diff --git a/tools/virsh-snapshot.c b/tools/virsh-snapshot.c
index d4aa4de..78db178 100644
--- a/tools/virsh-snapshot.c
+++ b/tools/virsh-snapshot.c
@@ -712,9 +712,10 @@ cmdSnapshotCurrent(vshControl *ctl, const vshCmd *cmd)
     if (vshCommandOptBool(cmd, "security-info"))
         flags |= VIR_DOMAIN_XML_SECURE;

-    dom = vshCommandOptDomain(ctl, cmd, &domname);
-    if (dom == NULL)
-        goto cleanup;
+    VSH_EXCLUSIVE_OPTIONS("name", "snapshotname");
+
+    if (!(dom = vshCommandOptDomain(ctl, cmd, &domname)))
+        return false;

     if (vshCommandOptStringReq(ctl, cmd, "snapshotname", &snapshotname) < 0)
         goto cleanup;
@@ -724,52 +725,48 @@ cmdSnapshotCurrent(vshControl *ctl, const vshCmd *cmd)
         flags = (VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE |
                  VIR_DOMAIN_SNAPSHOT_CREATE_CURRENT);

-        if (vshCommandOptBool(cmd, "name")) {
-            vshError(ctl, "%s",
-                     _("--name and snapshotname are mutually exclusive"));
-            goto cleanup;
-        }
-        snapshot = virDomainSnapshotLookupByName(dom, snapshotname, 0);
-        if (snapshot == NULL)
+        if (!(snapshot = virDomainSnapshotLookupByName(dom, snapshotname, 0)))
             goto cleanup;
+
         xml = virDomainSnapshotGetXMLDesc(snapshot, VIR_DOMAIN_XML_SECURE);
         if (!xml)
             goto cleanup;
+
         /* strstr is safe here, since xml came from libvirt API and not user */
         if (strstr(xml, "<state>disk-snapshot</state>"))
             flags |= VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY;
-        snapshot2 = virDomainSnapshotCreateXML(dom, xml, flags);
-        if (snapshot2 == NULL)
+
+        if (!(snapshot2 = virDomainSnapshotCreateXML(dom, xml, flags)))
             goto cleanup;
+
         virDomainSnapshotFree(snapshot2);
         vshPrint(ctl, _("Snapshot %s set as current"), snapshotname);
         ret = true;
         goto cleanup;
     }

-    current = virDomainHasCurrentSnapshot(dom, 0);
-    if (current < 0) {
+    if ((current = virDomainHasCurrentSnapshot(dom, 0)) < 0)
         goto cleanup;
-    } else if (!current) {
+
+    if (!current) {
         vshError(ctl, _("domain '%s' has no current snapshot"), domname);
         goto cleanup;
     } else {
-        const char *name = NULL;
-
         if (!(snapshot = virDomainSnapshotCurrent(dom, 0)))
             goto cleanup;

         if (vshCommandOptBool(cmd, "name")) {
-            name = virDomainSnapshotGetName(snapshot);
-            if (!name)
+            const char *name;
+            if (!(name = virDomainSnapshotGetName(snapshot)))
                 goto cleanup;
+
+            vshPrint(ctl, "%s", name);
         } else {
-            xml = virDomainSnapshotGetXMLDesc(snapshot, flags);
-            if (!xml)
+            if (!(xml = virDomainSnapshotGetXMLDesc(snapshot, flags)))
                 goto cleanup;
-        }

-        vshPrint(ctl, "%s", name ? name : xml);
+            vshPrint(ctl, "%s", xml);
+        }
     }

     ret = true;
@@ -780,8 +777,7 @@ cleanup:
     VIR_FREE(xml);
     if (snapshot)
         virDomainSnapshotFree(snapshot);
-    if (dom)
-        virDomainFree(dom);
+    virDomainFree(dom);

     return ret;
 }
-- 
1.8.1.1




More information about the libvir-list mailing list