Refactoring virDomainHostdevSubsysPCIDefParseXML() to use XPath

Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Kristina Hanicova 2021-05-04 13:40:00 +02:00 committed by Michal Privoznik
parent 56cbdb858e
commit bd8f53bcab

View File

@ -6798,12 +6798,16 @@ virDomainHostdevSubsysPCIOrigStatesDefParseXML(xmlNodePtr node,
static int static int
virDomainHostdevSubsysPCIDefParseXML(xmlNodePtr node, virDomainHostdevSubsysPCIDefParseXML(xmlNodePtr node,
xmlXPathContextPtr ctxt G_GNUC_UNUSED, xmlXPathContextPtr ctxt,
virDomainHostdevDef *def, virDomainHostdevDef *def,
unsigned int flags) unsigned int flags)
{ {
g_autofree char *filtering = NULL; g_autofree char *filtering = NULL;
xmlNodePtr cur; xmlNodePtr address = NULL;
xmlNodePtr origstates = NULL;
VIR_XPATH_NODE_AUTORESTORE(ctxt)
ctxt->node = node;
if ((filtering = virXMLPropString(node, "writeFiltering"))) { if ((filtering = virXMLPropString(node, "writeFiltering"))) {
int val; int val;
@ -6816,29 +6820,14 @@ virDomainHostdevSubsysPCIDefParseXML(xmlNodePtr node,
def->writeFiltering = val; def->writeFiltering = val;
} }
cur = node->children; if ((address = virXPathNode("./address", ctxt)) &&
while (cur != NULL) { virPCIDeviceAddressParseXML(address, &def->source.subsys.u.pci.addr) < 0)
if (cur->type == XML_ELEMENT_NODE) { return -1;
if (virXMLNodeNameEqual(cur, "address")) {
virPCIDeviceAddress *addr =
&def->source.subsys.u.pci.addr;
if (virPCIDeviceAddressParseXML(cur, addr) < 0) if ((flags & VIR_DOMAIN_DEF_PARSE_PCI_ORIG_STATES) &&
return -1; (origstates = virXPathNode("./origstates", ctxt)) &&
} else if ((flags & VIR_DOMAIN_DEF_PARSE_PCI_ORIG_STATES) && virDomainHostdevSubsysPCIOrigStatesDefParseXML(origstates, &def->origstates) < 0)
virXMLNodeNameEqual(cur, "origstates")) { return -1;
virDomainHostdevOrigStates *states = &def->origstates;
if (virDomainHostdevSubsysPCIOrigStatesDefParseXML(cur, states) < 0)
return -1;
} else {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("unknown pci source type '%s'"),
cur->name);
return -1;
}
}
cur = cur->next;
}
return 0; return 0;
} }