Fetch the XPath context and validate the node by using virXMLParse's
features.
This allows to completely remove virNWFilterBindingDefParseNode as
all callers now properly validate the root element name and have a XPath
context handy.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/conf/virnwfilterbindingdef.c | 34 ++++++--------------------------
src/conf/virnwfilterbindingdef.h | 3 +--
src/conf/virnwfilterbindingobj.c | 4 +++-
src/libvirt_private.syms | 2 +-
4 files changed, 11 insertions(+), 32 deletions(-)
diff --git a/src/conf/virnwfilterbindingdef.c b/src/conf/virnwfilterbindingdef.c
index e58bab3f08..524010c4c4 100644
--- a/src/conf/virnwfilterbindingdef.c
+++ b/src/conf/virnwfilterbindingdef.c
@@ -71,7 +71,7 @@ virNWFilterBindingDefCopy(virNWFilterBindingDef *src)
}
-static virNWFilterBindingDef *
+virNWFilterBindingDef *
virNWFilterBindingDefParseXML(xmlXPathContextPtr ctxt)
{
virNWFilterBindingDef *ret;
@@ -154,42 +154,20 @@ virNWFilterBindingDefParseXML(xmlXPathContextPtr ctxt)
}
-virNWFilterBindingDef *
-virNWFilterBindingDefParseNode(xmlDocPtr xml,
- xmlNodePtr root)
-{
- g_autoptr(xmlXPathContext) ctxt = NULL;
-
- if (STRNEQ((const char *)root->name, "filterbinding")) {
- virReportError(VIR_ERR_XML_ERROR,
- "%s",
- _("unknown root element for nwfilter binding"));
- return NULL;
- }
-
- if (!(ctxt = virXMLXPathContextNew(xml)))
- return NULL;
-
- ctxt->node = root;
- return virNWFilterBindingDefParseXML(ctxt);
-}
-
-
static virNWFilterBindingDef *
virNWFilterBindingDefParse(const char *xmlStr,
const char *filename,
unsigned int flags)
{
- virNWFilterBindingDef *def = NULL;
g_autoptr(xmlDoc) xml = NULL;
+ g_autoptr(xmlXPathContext) ctxt = NULL;
bool validate = flags & VIR_NWFILTER_BINDING_CREATE_VALIDATE;
- if ((xml = virXMLParse(filename, xmlStr,
_("(nwfilterbinding_definition)"),
- NULL, NULL, "nwfilterbinding.rng", validate))) {
- def = virNWFilterBindingDefParseNode(xml, xmlDocGetRootElement(xml));
- }
+ if (!(xml = virXMLParse(filename, xmlStr,
_("(nwfilterbinding_definition)"),
+ "filterbinding", &ctxt,
"nwfilterbinding.rng", validate)))
+ return NULL;
- return def;
+ return virNWFilterBindingDefParseXML(ctxt);
}
diff --git a/src/conf/virnwfilterbindingdef.h b/src/conf/virnwfilterbindingdef.h
index 4bf0f252f8..a5497d5a1c 100644
--- a/src/conf/virnwfilterbindingdef.h
+++ b/src/conf/virnwfilterbindingdef.h
@@ -47,8 +47,7 @@ virNWFilterBindingDef *
virNWFilterBindingDefCopy(virNWFilterBindingDef *src);
virNWFilterBindingDef *
-virNWFilterBindingDefParseNode(xmlDocPtr xml,
- xmlNodePtr root);
+virNWFilterBindingDefParseXML(xmlXPathContextPtr ctxt);
virNWFilterBindingDef *
virNWFilterBindingDefParseString(const char *xml,
diff --git a/src/conf/virnwfilterbindingobj.c b/src/conf/virnwfilterbindingobj.c
index 5ff53f7380..6e67c5c7b6 100644
--- a/src/conf/virnwfilterbindingobj.c
+++ b/src/conf/virnwfilterbindingobj.c
@@ -223,7 +223,9 @@ virNWFilterBindingObjParse(const char *filename)
return NULL;
}
- if (!(ret->def = virNWFilterBindingDefParseNode(xml, node)))
+ ctxt->node = node;
+
+ if (!(ret->def = virNWFilterBindingDefParseXML(ctxt)))
return NULL;
return g_steal_pointer(&ret);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 11862bb1a9..6e85a8c6cb 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1365,8 +1365,8 @@ virNWFilterBindingDefFormat;
virNWFilterBindingDefFormatBuf;
virNWFilterBindingDefFree;
virNWFilterBindingDefParseFile;
-virNWFilterBindingDefParseNode;
virNWFilterBindingDefParseString;
+virNWFilterBindingDefParseXML;
# conf/virnwfilterbindingobj.h
--
2.37.3