Signed-off-by: Kristina Hanicova <khanicov(a)redhat.com>
---
src/conf/domain_conf.c | 34 ++++++++++------------------------
1 file changed, 10 insertions(+), 24 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 6a03727f2c..808169883f 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -8122,48 +8122,34 @@ virSecurityDeviceLabelDefParseXML(virSecurityDeviceLabelDef
***seclabels_rtn,
*/
static virDomainLeaseDef *
virDomainLeaseDefParseXML(xmlNodePtr node,
- xmlXPathContextPtr ctxt G_GNUC_UNUSED)
+ xmlXPathContextPtr ctxt)
{
virDomainLeaseDef *def;
- xmlNodePtr cur;
g_autofree char *lockspace = NULL;
g_autofree char *key = NULL;
g_autofree char *path = NULL;
g_autofree char *offset = NULL;
+ VIR_XPATH_NODE_AUTORESTORE(ctxt)
+ ctxt->node = node;
def = g_new0(virDomainLeaseDef, 1);
- cur = node->children;
- while (cur != NULL) {
- if (cur->type == XML_ELEMENT_NODE) {
- if (!key && virXMLNodeNameEqual(cur, "key")) {
- if (!(key = virXMLNodeContentString(cur)))
- goto error;
- } else if (!lockspace &&
- virXMLNodeNameEqual(cur, "lockspace")) {
- if (!(lockspace = virXMLNodeContentString(cur)))
- goto error;
- } else if (!path &&
- virXMLNodeNameEqual(cur, "target")) {
- path = virXMLPropString(cur, "path");
- offset = virXMLPropString(cur, "offset");
- }
- }
- cur = cur->next;
- }
-
- if (!key) {
+ if (!(key = virXPathString("string(./key)", ctxt))) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("Missing 'key' element for lease"));
goto error;
}
- if (!path) {
+
+ if (!(lockspace = virXPathString("string(./lockspace)", ctxt)))
+ goto error;
+
+ if (!(path = virXPathString("string(./target/@path)", ctxt))) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("Missing 'target' element for lease"));
goto error;
}
- if (offset &&
+ if ((offset = virXPathString("string(./target/@offset)", ctxt)) &&
virStrToLong_ull(offset, NULL, 10, &def->offset) < 0) {
virReportError(VIR_ERR_XML_ERROR,
_("Malformed lease target offset %s"), offset);
--
2.30.2