XPath is good for random search of elements, not for accessing
attributes of one node.
Signed-off-by: Pavel Hrdina <phrdina(a)redhat.com>
---
Notes:
hint: review with -b
src/conf/domain_conf.c | 57 ++++++++++++++++++++++++++------------------------
1 file changed, 30 insertions(+), 27 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index ec4fbf36b3..4138a87f8b 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -14429,6 +14429,7 @@ virDomainIOMMUDefParseXML(xmlNodePtr node,
{
virDomainIOMMUDefPtr iommu = NULL, ret = NULL;
xmlNodePtr save = ctxt->node;
+ xmlNodePtr driver;
char *tmp = NULL;
int val;
@@ -14450,39 +14451,41 @@ virDomainIOMMUDefParseXML(xmlNodePtr node,
iommu->model = val;
- VIR_FREE(tmp);
- if ((tmp = virXPathString("string(./driver/@intremap)", ctxt))) {
- if ((val = virTristateSwitchTypeFromString(tmp)) < 0) {
- virReportError(VIR_ERR_XML_ERROR, _("unknown intremap value: %s"),
tmp);
- goto cleanup;
+ if ((driver = virXPathNode("./driver", ctxt))) {
+ VIR_FREE(tmp);
+ if ((tmp = virXMLPropString(driver, "intremap"))) {
+ if ((val = virTristateSwitchTypeFromString(tmp)) < 0) {
+ virReportError(VIR_ERR_XML_ERROR, _("unknown intremap value:
%s"), tmp);
+ goto cleanup;
+ }
+ iommu->intremap = val;
}
- iommu->intremap = val;
- }
- VIR_FREE(tmp);
- if ((tmp = virXPathString("string(./driver/@caching_mode)", ctxt))) {
- if ((val = virTristateSwitchTypeFromString(tmp)) < 0) {
- virReportError(VIR_ERR_XML_ERROR, _("unknown caching_mode value:
%s"), tmp);
- goto cleanup;
+ VIR_FREE(tmp);
+ if ((tmp = virXMLPropString(driver, "caching_mode"))) {
+ if ((val = virTristateSwitchTypeFromString(tmp)) < 0) {
+ virReportError(VIR_ERR_XML_ERROR, _("unknown caching_mode value:
%s"), tmp);
+ goto cleanup;
+ }
+ iommu->caching_mode = val;
}
- iommu->caching_mode = val;
- }
- VIR_FREE(tmp);
- if ((tmp = virXPathString("string(./driver/@iotlb)", ctxt))) {
- if ((val = virTristateSwitchTypeFromString(tmp)) < 0) {
- virReportError(VIR_ERR_XML_ERROR, _("unknown iotlb value: %s"),
tmp);
- goto cleanup;
+ VIR_FREE(tmp);
+ if ((tmp = virXMLPropString(driver, "iotlb"))) {
+ if ((val = virTristateSwitchTypeFromString(tmp)) < 0) {
+ virReportError(VIR_ERR_XML_ERROR, _("unknown iotlb value: %s"),
tmp);
+ goto cleanup;
+ }
+ iommu->iotlb = val;
}
- iommu->iotlb = val;
- }
- VIR_FREE(tmp);
- if ((tmp = virXPathString("string(./driver/@eim)", ctxt))) {
- if ((val = virTristateSwitchTypeFromString(tmp)) < 0) {
- virReportError(VIR_ERR_XML_ERROR, _("unknown eim value: %s"),
tmp);
- goto cleanup;
+ VIR_FREE(tmp);
+ if ((tmp = virXMLPropString(driver, "eim"))) {
+ if ((val = virTristateSwitchTypeFromString(tmp)) < 0) {
+ virReportError(VIR_ERR_XML_ERROR, _("unknown eim value: %s"),
tmp);
+ goto cleanup;
+ }
+ iommu->eim = val;
}
- iommu->eim = val;
}
ret = iommu;
--
2.13.5