Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/conf/checkpoint_conf.c | 6 ++++--
src/conf/domain_conf.c | 11 ++---------
src/conf/domain_conf.h | 3 +--
src/conf/snapshot_conf.c | 16 ++++++++++------
src/qemu/qemu_migration_cookie.c | 10 ++++++----
src/test/test_driver.c | 8 ++++----
tests/qemuxml2argvtest.c | 3 +--
7 files changed, 28 insertions(+), 29 deletions(-)
diff --git a/src/conf/checkpoint_conf.c b/src/conf/checkpoint_conf.c
index ea20bfdd14..6656089457 100644
--- a/src/conf/checkpoint_conf.c
+++ b/src/conf/checkpoint_conf.c
@@ -153,11 +153,13 @@ virDomainCheckpointDefParse(xmlXPathContextPtr ctxt,
def->parent.parent_name = virXPathString("string(./parent/name)",
ctxt);
if ((domainNode = virXPathNode("./domain", ctxt))) {
+ VIR_XPATH_NODE_AUTORESTORE(ctxt)
unsigned int domainParseFlags = VIR_DOMAIN_DEF_PARSE_INACTIVE |
VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE;
- def->parent.dom = virDomainDefParseNode(ctxt->node->doc,
domainNode,
- xmlopt, parseOpaque,
+ ctxt->node = domainNode;
+
+ def->parent.dom = virDomainDefParseNode(ctxt, xmlopt, parseOpaque,
domainParseFlags);
if (!def->parent.dom)
return NULL;
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index bd882039e7..bf165d0a64 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -19092,7 +19092,7 @@ virDomainDefParse(const char *xmlStr,
if (!xml)
return NULL;
- return virDomainDefParseNode(xml, ctxt->node, xmlopt, parseOpaque, flags);
+ return virDomainDefParseNode(ctxt, xmlopt, parseOpaque, flags);
}
virDomainDef *
@@ -19115,20 +19115,13 @@ virDomainDefParseFile(const char *filename,
virDomainDef *
-virDomainDefParseNode(xmlDocPtr xml,
- xmlNodePtr root,
+virDomainDefParseNode(xmlXPathContext *ctxt,
virDomainXMLOption *xmlopt,
void *parseOpaque,
unsigned int flags)
{
- g_autoptr(xmlXPathContext) ctxt = NULL;
g_autoptr(virDomainDef) def = NULL;
- if (!(ctxt = virXMLXPathContextNew(xml)))
- return NULL;
-
- ctxt->node = root;
-
if (!(def = virDomainDefParseXML(ctxt, xmlopt, flags)))
return NULL;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 6eab1056c1..8f8a54bc41 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -3612,8 +3612,7 @@ virDomainDef *virDomainDefParseFile(const char *filename,
virDomainXMLOption *xmlopt,
void *parseOpaque,
unsigned int flags);
-virDomainDef *virDomainDefParseNode(xmlDocPtr doc,
- xmlNodePtr root,
+virDomainDef *virDomainDefParseNode(xmlXPathContext *ctxt,
virDomainXMLOption *xmlopt,
void *parseOpaque,
unsigned int flags);
diff --git a/src/conf/snapshot_conf.c b/src/conf/snapshot_conf.c
index afdc11876d..4b5b908d66 100644
--- a/src/conf/snapshot_conf.c
+++ b/src/conf/snapshot_conf.c
@@ -266,15 +266,15 @@ virDomainSnapshotDefParse(xmlXPathContextPtr ctxt,
* clients will have to decide between best effort
* initialization or outright failure. */
if ((domtype = virXPathString("string(./domain/@type)", ctxt))) {
- xmlNodePtr domainNode = virXPathNode("./domain", ctxt);
+ VIR_XPATH_NODE_AUTORESTORE(ctxt)
- if (!domainNode) {
+ if (!(ctxt->node = virXPathNode("./domain", ctxt))) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("missing domain in snapshot"));
return NULL;
}
- def->parent.dom = virDomainDefParseNode(ctxt->node->doc,
domainNode,
- xmlopt, parseOpaque,
+
+ def->parent.dom = virDomainDefParseNode(ctxt, xmlopt, parseOpaque,
domainflags);
if (!def->parent.dom)
return NULL;
@@ -286,8 +286,12 @@ virDomainSnapshotDefParse(xmlXPathContextPtr ctxt,
* VM. In case of absent, leave parent.inactiveDom NULL and use
* parent.dom for config and live XML. */
if ((inactiveDomNode = virXPathNode("./inactiveDomain", ctxt))) {
- def->parent.inactiveDom = virDomainDefParseNode(ctxt->node->doc,
inactiveDomNode,
- xmlopt, NULL, domainflags);
+ VIR_XPATH_NODE_AUTORESTORE(ctxt)
+
+ ctxt->node = inactiveDomNode;
+
+ def->parent.inactiveDom = virDomainDefParseNode(ctxt, xmlopt, NULL,
+ domainflags);
if (!def->parent.inactiveDom)
return NULL;
}
diff --git a/src/qemu/qemu_migration_cookie.c b/src/qemu/qemu_migration_cookie.c
index a4e018e204..95e803b3e1 100644
--- a/src/qemu/qemu_migration_cookie.c
+++ b/src/qemu/qemu_migration_cookie.c
@@ -1261,7 +1261,6 @@ static int
qemuMigrationCookieXMLParse(qemuMigrationCookie *mig,
virQEMUDriver *driver,
virQEMUCaps *qemuCaps,
- xmlDocPtr doc,
xmlXPathContextPtr ctxt,
unsigned int flags)
{
@@ -1356,6 +1355,7 @@ qemuMigrationCookieXMLParse(qemuMigrationCookie *mig,
if ((flags & QEMU_MIGRATION_COOKIE_PERSISTENT) &&
virXPathBoolean("count(./domain) > 0", ctxt)) {
+ VIR_XPATH_NODE_AUTORESTORE(ctxt)
g_autofree xmlNodePtr *nodes = NULL;
if ((virXPathNodeSet("./domain", ctxt, &nodes)) != 1) {
@@ -1363,8 +1363,10 @@ qemuMigrationCookieXMLParse(qemuMigrationCookie *mig,
_("Too many domain elements in migration cookie"));
return -1;
}
- mig->persistent = virDomainDefParseNode(doc, nodes[0],
- driver->xmlopt, qemuCaps,
+
+ ctxt->node = nodes[0];
+
+ mig->persistent = virDomainDefParseNode(ctxt, driver->xmlopt, qemuCaps,
VIR_DOMAIN_DEF_PARSE_INACTIVE |
VIR_DOMAIN_DEF_PARSE_ABI_UPDATE_MIGRATION
|
VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE);
@@ -1420,7 +1422,7 @@ qemuMigrationCookieXMLParseStr(qemuMigrationCookie *mig,
if (!(doc = virXMLParseStringCtxt(xml, _("(qemu_migration_cookie)"),
&ctxt)))
return -1;
- return qemuMigrationCookieXMLParse(mig, driver, qemuCaps, doc, ctxt, flags);
+ return qemuMigrationCookieXMLParse(mig, driver, qemuCaps, ctxt, flags);
}
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 9f0517e89e..373e5f7846 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -1019,14 +1019,14 @@ testParseDomains(testDriver *privconn,
return -1;
for (i = 0; i < num; i++) {
+ VIR_XPATH_NODE_AUTORESTORE(ctxt)
g_autoptr(virDomainDef) def = NULL;
testDomainNamespaceDef *nsdata;
- xmlNodePtr node = testParseXMLDocFromFile(nodes[i], file);
- if (!node)
+
+ if (!(ctxt->node = testParseXMLDocFromFile(nodes[i], file)))
goto error;
- def = virDomainDefParseNode(ctxt->doc, node,
- privconn->xmlopt, NULL,
+ def = virDomainDefParseNode(ctxt, privconn->xmlopt, NULL,
VIR_DOMAIN_DEF_PARSE_INACTIVE);
if (!def)
goto error;
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 8785c96ce1..cad4c1abd5 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -709,8 +709,7 @@ testCompareXMLToArgv(const void *data)
parseFlags |= VIR_DOMAIN_DEF_PARSE_INACTIVE;
- if (!(vm->def = virDomainDefParseNode(xml, ctxt->node, driver.xmlopt, NULL,
- parseFlags))) {
+ if (!(vm->def = virDomainDefParseNode(ctxt, driver.xmlopt, NULL, parseFlags))) {
err = virGetLastError();
if (!err) {
VIR_TEST_DEBUG("no error was reported for expected parse error");
--
2.37.3