Rather than moving the XPath root node in the caller and then still
passing it down, make sure that the callees move the node themselves.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/conf/domain_conf.c | 45 ++++++++++++++++++------------------------
1 file changed, 19 insertions(+), 26 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index ea4fbf2280..bbeb1c1a8d 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -14606,9 +14606,12 @@ virSysinfoBIOSParseXML(xmlNodePtr node,
xmlXPathContextPtr ctxt,
virSysinfoBIOSDefPtr *bios)
{
+ VIR_XPATH_NODE_AUTORESTORE(ctxt);
int ret = -1;
virSysinfoBIOSDefPtr def;
+ ctxt->node = node;
+
if (!virXMLNodeNameEqual(node, "bios")) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("XML does not contain expected 'bios'
element"));
@@ -14666,10 +14669,13 @@ virSysinfoSystemParseXML(xmlNodePtr node,
unsigned char *domUUID,
bool uuid_generated)
{
+ VIR_XPATH_NODE_AUTORESTORE(ctxt);
int ret = -1;
virSysinfoSystemDefPtr def;
VIR_AUTOFREE(char *) tmpUUID = NULL;
+ ctxt->node = node;
+
if (!virXMLNodeNameEqual(node, "system")) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("XML does not contain expected 'system'
element"));
@@ -14786,15 +14792,19 @@ virSysinfoBaseBoardParseXML(xmlXPathContextPtr ctxt,
static int
-virSysinfoOEMStringsParseXML(xmlXPathContextPtr ctxt,
+virSysinfoOEMStringsParseXML(xmlNodePtr node,
+ xmlXPathContextPtr ctxt,
virSysinfoOEMStringsDefPtr *oem)
{
+ VIR_XPATH_NODE_AUTORESTORE(ctxt);
int ret = -1;
virSysinfoOEMStringsDefPtr def;
int nstrings;
size_t i;
VIR_AUTOFREE(xmlNodePtr *) strings = NULL;
+ ctxt->node = node;
+
nstrings = virXPathNodeSet("./entry", ctxt, &strings);
if (nstrings < 0)
return -1;
@@ -14824,9 +14834,12 @@ virSysinfoChassisParseXML(xmlNodePtr node,
xmlXPathContextPtr ctxt,
virSysinfoChassisDefPtr *chassisdef)
{
+ VIR_XPATH_NODE_AUTORESTORE(ctxt);
int ret = -1;
virSysinfoChassisDefPtr def;
+ ctxt->node = node;
+
if (!xmlStrEqual(node->name, BAD_CAST "chassis")) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("XML does not contain expected 'chassis'
element"));
@@ -14868,7 +14881,7 @@ virSysinfoParseXML(xmlNodePtr node,
bool uuid_generated)
{
virSysinfoDefPtr def;
- xmlNodePtr oldnode, tmpnode;
+ xmlNodePtr tmpnode;
VIR_AUTOFREE(char *) type = NULL;
if (!virXMLNodeNameEqual(node, "sysinfo")) {
@@ -14894,25 +14907,15 @@ virSysinfoParseXML(xmlNodePtr node,
/* Extract BIOS related metadata */
if ((tmpnode = virXPathNode("./bios[1]", ctxt)) != NULL) {
- oldnode = ctxt->node;
- ctxt->node = tmpnode;
- if (virSysinfoBIOSParseXML(tmpnode, ctxt, &def->bios) < 0) {
- ctxt->node = oldnode;
+ if (virSysinfoBIOSParseXML(tmpnode, ctxt, &def->bios) < 0)
goto error;
- }
- ctxt->node = oldnode;
}
/* Extract system related metadata */
if ((tmpnode = virXPathNode("./system[1]", ctxt)) != NULL) {
- oldnode = ctxt->node;
- ctxt->node = tmpnode;
if (virSysinfoSystemParseXML(tmpnode, ctxt, &def->system,
- domUUID, uuid_generated) < 0) {
- ctxt->node = oldnode;
+ domUUID, uuid_generated) < 0)
goto error;
- }
- ctxt->node = oldnode;
}
/* Extract system base board metadata */
@@ -14921,24 +14924,14 @@ virSysinfoParseXML(xmlNodePtr node,
/* Extract chassis related metadata */
if ((tmpnode = virXPathNode("./chassis[1]", ctxt)) != NULL) {
- oldnode = ctxt->node;
- ctxt->node = tmpnode;
- if (virSysinfoChassisParseXML(tmpnode, ctxt, &def->chassis) < 0) {
- ctxt->node = oldnode;
+ if (virSysinfoChassisParseXML(tmpnode, ctxt, &def->chassis) < 0)
goto error;
- }
- ctxt->node = oldnode;
}
/* Extract system related metadata */
if ((tmpnode = virXPathNode("./oemStrings[1]", ctxt)) != NULL) {
- oldnode = ctxt->node;
- ctxt->node = tmpnode;
- if (virSysinfoOEMStringsParseXML(ctxt, &def->oemStrings) < 0) {
- ctxt->node = oldnode;
+ if (virSysinfoOEMStringsParseXML(tmpnode, ctxt, &def->oemStrings) < 0)
goto error;
- }
- ctxt->node = oldnode;
}
cleanup:
--
2.20.1