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