From 4baf00fc309b1ba26d73a4f01700146df1e7b91e Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Thu, 7 Mar 2013 11:07:03 +0100 Subject: [PATCH] virsh-snapshot: Refactor cmdSnapshotCurrent Use the exclusive parameter checker and touch up some parts to simplify code. --- tools/virsh-snapshot.c | 50 +++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/tools/virsh-snapshot.c b/tools/virsh-snapshot.c index 08ec4579ab..bed4fc4f9b 100644 --- a/tools/virsh-snapshot.c +++ b/tools/virsh-snapshot.c @@ -686,9 +686,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; @@ -698,52 +699,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, "disk-snapshot")) 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; - } else { - xml = virDomainSnapshotGetXMLDesc(snapshot, flags); - if (!xml) - goto cleanup; - } - vshPrint(ctl, "%s", name ? name : xml); + vshPrint(ctl, "%s", name); + } else { + if (!(xml = virDomainSnapshotGetXMLDesc(snapshot, flags))) + goto cleanup; + + vshPrint(ctl, "%s", xml); + } } ret = true; @@ -754,8 +751,7 @@ cleanup: VIR_FREE(xml); if (snapshot) virDomainSnapshotFree(snapshot); - if (dom) - virDomainFree(dom); + virDomainFree(dom); return ret; }