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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list