提交 58bf9d1d 编写于 作者: P Pavel Hrdina

conf: use virXMLPropString for virDomainVirtioOptionsParseXML

XPath is good for random search of elements, not for accessing
attributes of one node.
Signed-off-by: NPavel Hrdina <phrdina@redhat.com>
上级 561726cd
...@@ -1114,7 +1114,7 @@ virDomainXMLOptionGetNamespace(virDomainXMLOptionPtr xmlopt) ...@@ -1114,7 +1114,7 @@ virDomainXMLOptionGetNamespace(virDomainXMLOptionPtr xmlopt)
} }
static int static int
virDomainVirtioOptionsParseXML(xmlXPathContextPtr ctxt, virDomainVirtioOptionsParseXML(xmlNodePtr driver,
virDomainVirtioOptionsPtr *virtio) virDomainVirtioOptionsPtr *virtio)
{ {
char *str = NULL; char *str = NULL;
...@@ -1122,12 +1122,15 @@ virDomainVirtioOptionsParseXML(xmlXPathContextPtr ctxt, ...@@ -1122,12 +1122,15 @@ virDomainVirtioOptionsParseXML(xmlXPathContextPtr ctxt,
int val; int val;
virDomainVirtioOptionsPtr res; virDomainVirtioOptionsPtr res;
if (*virtio || !driver)
return 0;
if (VIR_ALLOC(*virtio) < 0) if (VIR_ALLOC(*virtio) < 0)
return -1; return -1;
res = *virtio; res = *virtio;
if ((str = virXPathString("string(./driver/@iommu)", ctxt))) { if ((str = virXMLPropString(driver, "iommu"))) {
if ((val = virTristateSwitchTypeFromString(str)) <= 0) { if ((val = virTristateSwitchTypeFromString(str)) <= 0) {
virReportError(VIR_ERR_XML_ERROR, "%s", virReportError(VIR_ERR_XML_ERROR, "%s",
_("invalid iommu value")); _("invalid iommu value"));
...@@ -1137,7 +1140,7 @@ virDomainVirtioOptionsParseXML(xmlXPathContextPtr ctxt, ...@@ -1137,7 +1140,7 @@ virDomainVirtioOptionsParseXML(xmlXPathContextPtr ctxt,
} }
VIR_FREE(str); VIR_FREE(str);
if ((str = virXPathString("string(./driver/@ats)", ctxt))) { if ((str = virXMLPropString(driver, "ats"))) {
if ((val = virTristateSwitchTypeFromString(str)) <= 0) { if ((val = virTristateSwitchTypeFromString(str)) <= 0) {
virReportError(VIR_ERR_XML_ERROR, "%s", virReportError(VIR_ERR_XML_ERROR, "%s",
_("invalid ats value")); _("invalid ats value"));
...@@ -8406,6 +8409,9 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt, ...@@ -8406,6 +8409,9 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
} }
} else if (!def->src->driverName && } else if (!def->src->driverName &&
virXMLNodeNameEqual(cur, "driver")) { virXMLNodeNameEqual(cur, "driver")) {
if (virDomainVirtioOptionsParseXML(cur, &def->virtio) < 0)
goto error;
if (virDomainDiskDefDriverParseXML(def, cur) < 0) if (virDomainDiskDefDriverParseXML(def, cur) < 0)
goto error; goto error;
} else if (!def->mirror && } else if (!def->mirror &&
...@@ -8491,9 +8497,6 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt, ...@@ -8491,9 +8497,6 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
} }
} }
if (virDomainVirtioOptionsParseXML(ctxt, &def->virtio) < 0)
goto error;
/* Disk volume types will have authentication information handled in /* Disk volume types will have authentication information handled in
* virStorageTranslateDiskSourcePool * virStorageTranslateDiskSourcePool
*/ */
...@@ -9078,6 +9081,9 @@ virDomainControllerDefParseXML(xmlNodePtr node, ...@@ -9078,6 +9081,9 @@ virDomainControllerDefParseXML(xmlNodePtr node,
max_sectors = virXMLPropString(cur, "max_sectors"); max_sectors = virXMLPropString(cur, "max_sectors");
ioeventfd = virXMLPropString(cur, "ioeventfd"); ioeventfd = virXMLPropString(cur, "ioeventfd");
iothread = virXMLPropString(cur, "iothread"); iothread = virXMLPropString(cur, "iothread");
if (virDomainVirtioOptionsParseXML(cur, &def->virtio) < 0)
goto error;
} else if (virXMLNodeNameEqual(cur, "model")) { } else if (virXMLNodeNameEqual(cur, "model")) {
if (processedModel) { if (processedModel) {
virReportError(VIR_ERR_XML_ERROR, "%s", virReportError(VIR_ERR_XML_ERROR, "%s",
...@@ -9105,9 +9111,6 @@ virDomainControllerDefParseXML(xmlNodePtr node, ...@@ -9105,9 +9111,6 @@ virDomainControllerDefParseXML(xmlNodePtr node,
cur = cur->next; cur = cur->next;
} }
if (virDomainVirtioOptionsParseXML(ctxt, &def->virtio) < 0)
goto error;
/* node is parsed differently from target attributes because /* node is parsed differently from target attributes because
* someone thought it should be a subelement instead... * someone thought it should be a subelement instead...
*/ */
...@@ -9483,6 +9486,9 @@ virDomainFSDefParseXML(xmlNodePtr node, ...@@ -9483,6 +9486,9 @@ virDomainFSDefParseXML(xmlNodePtr node,
wrpolicy = virXMLPropString(cur, "wrpolicy"); wrpolicy = virXMLPropString(cur, "wrpolicy");
if (!format) if (!format)
format = virXMLPropString(cur, "format"); format = virXMLPropString(cur, "format");
if (virDomainVirtioOptionsParseXML(cur, &def->virtio) < 0)
goto error;
} }
} }
cur = cur->next; cur = cur->next;
...@@ -9544,9 +9550,6 @@ virDomainFSDefParseXML(xmlNodePtr node, ...@@ -9544,9 +9550,6 @@ virDomainFSDefParseXML(xmlNodePtr node,
goto error; goto error;
} }
if (virDomainVirtioOptionsParseXML(ctxt, &def->virtio) < 0)
goto error;
def->src->path = source; def->src->path = source;
source = NULL; source = NULL;
def->dst = target; def->dst = target;
...@@ -9986,6 +9989,9 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt, ...@@ -9986,6 +9989,9 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
queues = virXMLPropString(cur, "queues"); queues = virXMLPropString(cur, "queues");
rx_queue_size = virXMLPropString(cur, "rx_queue_size"); rx_queue_size = virXMLPropString(cur, "rx_queue_size");
tx_queue_size = virXMLPropString(cur, "tx_queue_size"); tx_queue_size = virXMLPropString(cur, "tx_queue_size");
if (virDomainVirtioOptionsParseXML(cur, &def->virtio) < 0)
goto error;
} else if (virXMLNodeNameEqual(cur, "filterref")) { } else if (virXMLNodeNameEqual(cur, "filterref")) {
if (filter) { if (filter) {
virReportError(VIR_ERR_XML_ERROR, "%s", virReportError(VIR_ERR_XML_ERROR, "%s",
...@@ -10563,9 +10569,6 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt, ...@@ -10563,9 +10569,6 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
goto error; goto error;
} }
if (virDomainVirtioOptionsParseXML(ctxt, &def->virtio) < 0)
goto error;
cleanup: cleanup:
ctxt->node = oldnode; ctxt->node = oldnode;
VIR_FREE(macaddr); VIR_FREE(macaddr);
...@@ -11689,7 +11692,8 @@ virDomainInputDefParseXML(const virDomainDef *dom, ...@@ -11689,7 +11692,8 @@ virDomainInputDefParseXML(const virDomainDef *dom,
goto error; goto error;
} }
if (virDomainVirtioOptionsParseXML(ctxt, &def->virtio) < 0) if (virDomainVirtioOptionsParseXML(virXPathNode("./driver", ctxt),
&def->virtio) < 0)
goto error; goto error;
cleanup: cleanup:
...@@ -13028,7 +13032,8 @@ virDomainRNGDefParseXML(virDomainXMLOptionPtr xmlopt, ...@@ -13028,7 +13032,8 @@ virDomainRNGDefParseXML(virDomainXMLOptionPtr xmlopt,
if (virDomainDeviceInfoParseXML(node, NULL, &def->info, flags) < 0) if (virDomainDeviceInfoParseXML(node, NULL, &def->info, flags) < 0)
goto error; goto error;
if (virDomainVirtioOptionsParseXML(ctxt, &def->virtio) < 0) if (virDomainVirtioOptionsParseXML(virXPathNode("./driver", ctxt),
&def->virtio) < 0)
goto error; goto error;
cleanup: cleanup:
...@@ -13096,7 +13101,8 @@ virDomainMemballoonDefParseXML(xmlNodePtr node, ...@@ -13096,7 +13101,8 @@ virDomainMemballoonDefParseXML(xmlNodePtr node,
else if (virDomainDeviceInfoParseXML(node, NULL, &def->info, flags) < 0) else if (virDomainDeviceInfoParseXML(node, NULL, &def->info, flags) < 0)
goto error; goto error;
if (virDomainVirtioOptionsParseXML(ctxt, &def->virtio) < 0) if (virDomainVirtioOptionsParseXML(virXPathNode("./driver", ctxt),
&def->virtio) < 0)
goto error; goto error;
cleanup: cleanup:
...@@ -13681,6 +13687,10 @@ virDomainVideoDefParseXML(xmlNodePtr node, ...@@ -13681,6 +13687,10 @@ virDomainVideoDefParseXML(xmlNodePtr node,
def->accel = virDomainVideoAccelDefParseXML(cur); def->accel = virDomainVideoAccelDefParseXML(cur);
} }
if (virXMLNodeNameEqual(cur, "driver")) {
if (virDomainVirtioOptionsParseXML(cur, &def->virtio) < 0)
goto error;
}
} }
cur = cur->next; cur = cur->next;
} }
...@@ -13759,9 +13769,6 @@ virDomainVideoDefParseXML(xmlNodePtr node, ...@@ -13759,9 +13769,6 @@ virDomainVideoDefParseXML(xmlNodePtr node,
if (virDomainDeviceInfoParseXML(node, NULL, &def->info, flags) < 0) if (virDomainDeviceInfoParseXML(node, NULL, &def->info, flags) < 0)
goto error; goto error;
if (virDomainVirtioOptionsParseXML(ctxt, &def->virtio) < 0)
goto error;
def->driver = virDomainVideoDriverDefParseXML(node); def->driver = virDomainVideoDriverDefParseXML(node);
cleanup: cleanup:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册