]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virsh: virshMakeCloneXML: Use virXPathNode instead of xmlXPathEval
authorPeter Krempa <pkrempa@redhat.com>
Thu, 1 Dec 2022 08:39:30 +0000 (09:39 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 2 Dec 2022 15:49:25 +0000 (16:49 +0100)
Refactor the code to use the XPath helpers instead of open-coding them.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
tools/virsh-volume.c

index fbbeddd8f334ff0fd7206bd7b9e77717624d959d..83e97df2dced0c09e89bf8faf5658ffe8c32eb0b 100644 (file)
@@ -505,28 +505,22 @@ cmdVolCreateFrom(vshControl *ctl, const vshCmd *cmd)
     return true;
 }
 
-static xmlChar *
+static char *
 virshMakeCloneXML(const char *origxml, const char *newname)
 {
     g_autoptr(xmlDoc) doc = NULL;
     g_autoptr(xmlXPathContext) ctxt = NULL;
-    g_autoptr(xmlXPathObject) obj = NULL;
-    xmlChar *newxml = NULL;
-    int size;
+    xmlNodePtr node;
 
-    doc = virXMLParseStringCtxt(origxml, _("(volume_definition)"), &ctxt);
-    if (!doc)
+    if (!(doc = virXMLParseStringCtxt(origxml, _("(volume_definition)"), &ctxt)))
         return NULL;
 
-    obj = xmlXPathEval(BAD_CAST "/volume/name", ctxt);
-    if (obj == NULL || obj->nodesetval == NULL ||
-        obj->nodesetval->nodeTab == NULL)
+    if (!(node = virXPathNode("/volume/name", ctxt)))
         return NULL;
 
-    xmlNodeSetContent(obj->nodesetval->nodeTab[0], (const xmlChar *)newname);
-    xmlDocDumpMemory(doc, &newxml, &size);
+    xmlNodeSetContent(node, (const xmlChar *)newname);
 
-    return newxml;
+    return virXMLNodeToString(doc, doc->children);
 }
 
 /*
@@ -574,7 +568,7 @@ cmdVolClone(vshControl *ctl, const vshCmd *cmd)
     g_autoptr(virshStorageVol) newvol = NULL;
     const char *name = NULL;
     g_autofree char *origxml = NULL;
-    g_autofree xmlChar *newxml = NULL;
+    g_autofree char *newxml = NULL;
     unsigned int flags = 0;
 
     if (!(origvol = virshCommandOptVol(ctl, cmd, "vol", "pool", NULL)))
@@ -608,8 +602,7 @@ cmdVolClone(vshControl *ctl, const vshCmd *cmd)
         return true;
     }
 
-    if (!(newvol = virStorageVolCreateXMLFrom(origpool, (char *) newxml,
-                                              origvol, flags))) {
+    if (!(newvol = virStorageVolCreateXMLFrom(origpool, newxml, origvol, flags))) {
         vshError(ctl, _("Failed to clone vol from %s"),
                  virStorageVolGetName(origvol));
         return false;