[PATCH 21/43] prlsdkParseSnapshotTree: Simplify XML parsing code

Peter Krempa pkrempa at redhat.com
Tue Oct 4 08:32:55 UTC 2022


Use features of virXMLParse to validate root node and fetch XPath
context.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/vz/vz_sdk.c | 17 ++---------------
 1 file changed, 2 insertions(+), 15 deletions(-)

diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c
index 8fb7a9948d..8cd3348f5c 100644
--- a/src/vz/vz_sdk.c
+++ b/src/vz/vz_sdk.c
@@ -4566,7 +4566,6 @@ prlsdkParseSnapshotTree(const char *treexml)
     virDomainSnapshotObjList *ret = NULL;
     g_autoptr(xmlDoc) xml = NULL;
     g_autoptr(xmlXPathContext) ctxt = NULL;
-    xmlNodePtr root;
     xmlNodePtr *nodes = NULL;
     virDomainSnapshotDef *def = NULL;
     virDomainMomentObj *snapshot;
@@ -4582,21 +4581,9 @@ prlsdkParseSnapshotTree(const char *treexml)
         return snapshots;

     if (!(xml = virXMLParse(NULL, treexml, _("(snapshot_tree)"),
-                            NULL, NULL, NULL, false)))
+                            "ParallelsSavedStates", &ctxt, NULL, false)))
         goto cleanup;

-    root = xmlDocGetRootElement(xml);
-    if (!virXMLNodeNameEqual(root, "ParallelsSavedStates")) {
-        virReportError(VIR_ERR_INTERNAL_ERROR,
-                       _("unexpected root element: '%s'"), root->name);
-        goto cleanup;
-    }
-
-    if (!(ctxt = virXMLXPathContextNew(xml)))
-        goto cleanup;
-
-    ctxt->node = root;
-
     if ((n = virXPathNodeSet("//SavedStateItem", ctxt, &nodes)) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                        _("cannot extract snapshot nodes"));
@@ -4604,7 +4591,7 @@ prlsdkParseSnapshotTree(const char *treexml)
     }

     for (i = 0; i < n; i++) {
-        if (nodes[i]->parent == root)
+        if (nodes[i]->parent == xmlDocGetRootElement(xml))
             continue;

         def = g_new0(virDomainSnapshotDef, 1);
-- 
2.37.3



More information about the libvir-list mailing list