}
-static virNodeDeviceDef *
+virNodeDeviceDef *
virNodeDeviceDefParseXML(xmlXPathContextPtr ctxt,
int create,
const char *virt_type)
}
-virNodeDeviceDef *
-virNodeDeviceDefParseNode(xmlDocPtr xml,
- xmlNodePtr root,
- int create,
- const char *virt_type)
-{
- g_autoptr(xmlXPathContext) ctxt = NULL;
-
- if (!virXMLNodeNameEqual(root, "device")) {
- virReportError(VIR_ERR_XML_ERROR,
- _("unexpected root element <%s> "
- "expecting <device>"),
- root->name);
- return NULL;
- }
-
- if (!(ctxt = virXMLXPathContextNew(xml)))
- return NULL;
-
- ctxt->node = root;
- return virNodeDeviceDefParseXML(ctxt, create, virt_type);
-}
-
-
static virNodeDeviceDef *
virNodeDeviceDefParse(const char *str,
const char *filename,
void *opaque)
{
g_autoptr(xmlDoc) xml = NULL;
+ g_autoptr(xmlXPathContext) ctxt = NULL;
g_autoptr(virNodeDeviceDef) def = NULL;
if (!(xml = virXMLParse(filename, str, _("(node_device_definition)"),
- NULL, NULL, NULL, false)) ||
- !(def = virNodeDeviceDefParseNode(xml, xmlDocGetRootElement(xml),
- create, virt_type)))
+ "device", &ctxt, NULL, false)))
+ return NULL;
+
+ if (!(def = virNodeDeviceDefParseXML(ctxt, create, virt_type)))
return NULL;
if (parserCallbacks) {
void *opaque);
virNodeDeviceDef *
-virNodeDeviceDefParseNode(xmlDocPtr xml,
- xmlNodePtr root,
- int create,
- const char *virt_type);
+virNodeDeviceDefParseXML(xmlXPathContextPtr ctxt,
+ int create,
+ const char *virt_type);
int
virNodeDeviceGetWWNs(virNodeDeviceDef *def,
virNodeDeviceDefFormat;
virNodeDeviceDefFree;
virNodeDeviceDefParseFile;
-virNodeDeviceDefParseNode;
virNodeDeviceDefParseString;
+virNodeDeviceDefParseXML;
virNodeDeviceGetAPMatrixDynamicCaps;
virNodeDeviceGetCSSDynamicCaps;
virNodeDeviceGetMdevParentDynamicCaps;
const char *file,
xmlXPathContextPtr ctxt)
{
+ VIR_XPATH_NODE_AUTORESTORE(ctxt)
int num;
size_t i;
virNodeDeviceObj *obj;
for (i = 0; i < num; i++) {
virNodeDeviceDef *def;
- xmlNodePtr node = testParseXMLDocFromFile(nodes[i], file);
- if (!node)
+ if (!(ctxt->node = testParseXMLDocFromFile(nodes[i], file)))
return -1;
- def = virNodeDeviceDefParseNode(ctxt->doc, node, 0, NULL);
- if (!def)
+ if (!(def = virNodeDeviceDefParseXML(ctxt, 0, NULL)))
return -1;
if (!(obj = virNodeDeviceObjListAssignDef(privconn->devs, def))) {