[PATCH 05/13] virsh: Refactor cleanup in 'cmdVolClone'

Peter Krempa pkrempa at redhat.com
Fri Dec 2 14:16:49 UTC 2022


Automatically free 'newxml' and remove the 'cleanup' label and 'ret'
variable.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 tools/virsh-volume.c | 37 ++++++++++++++-----------------------
 1 file changed, 14 insertions(+), 23 deletions(-)

diff --git a/tools/virsh-volume.c b/tools/virsh-volume.c
index 4f23481180..b7a1ddb9e5 100644
--- a/tools/virsh-volume.c
+++ b/tools/virsh-volume.c
@@ -570,12 +570,11 @@ cmdVolClone(vshControl *ctl, const vshCmd *cmd)
     g_autoptr(virshStorageVol) newvol = NULL;
     const char *name = NULL;
     g_autofree char *origxml = NULL;
-    xmlChar *newxml = NULL;
-    bool ret = false;
+    g_autofree xmlChar *newxml = NULL;
     unsigned int flags = 0;

     if (!(origvol = virshCommandOptVol(ctl, cmd, "vol", "pool", NULL)))
-        goto cleanup;
+        return false;

     if (vshCommandOptBool(cmd, "prealloc-metadata"))
         flags |= VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA;
@@ -586,38 +585,30 @@ cmdVolClone(vshControl *ctl, const vshCmd *cmd)
     origpool = virStoragePoolLookupByVolume(origvol);
     if (!origpool) {
         vshError(ctl, "%s", _("failed to get parent pool"));
-        goto cleanup;
+        return false;
     }

     if (vshCommandOptStringReq(ctl, cmd, "newname", &name) < 0)
-        goto cleanup;
+        return false;

-    origxml = virStorageVolGetXMLDesc(origvol, 0);
-    if (!origxml)
-        goto cleanup;
+    if (!(origxml = virStorageVolGetXMLDesc(origvol, 0)))
+        return false;

-    newxml = virshMakeCloneXML(origxml, name);
-    if (!newxml) {
+    if (!(newxml = virshMakeCloneXML(origxml, name))) {
         vshError(ctl, "%s", _("Failed to allocate XML buffer"));
-        goto cleanup;
+        return false;
     }

-    newvol = virStorageVolCreateXMLFrom(origpool, (char *) newxml, origvol, flags);
-
-    if (newvol != NULL) {
-        vshPrintExtra(ctl, _("Vol %s cloned from %s\n"),
-                      virStorageVolGetName(newvol), virStorageVolGetName(origvol));
-    } else {
+    if (!(newvol = virStorageVolCreateXMLFrom(origpool, (char *) newxml,
+                                              origvol, flags))) {
         vshError(ctl, _("Failed to clone vol from %s"),
                  virStorageVolGetName(origvol));
-        goto cleanup;
+        return false;
     }

-    ret = true;
-
- cleanup:
-    xmlFree(newxml);
-    return ret;
+    vshPrintExtra(ctl, _("Vol %s cloned from %s\n"),
+                  virStorageVolGetName(newvol), virStorageVolGetName(origvol));
+    return true;
 }

 /*
-- 
2.38.1



More information about the libvir-list mailing list