Having to repeat "./job[1]/" XPath prefix for every single element or attribute we want to parse is suboptimal. And even more so once we further extract code from qemuDomainObjPrivateXMLParseJob into separate functions. Signed-off-by: Jiri Denemark <jdenemar@xxxxxxxxxx> --- src/qemu/qemu_domain.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index a08a1825e9..570ad4ea8f 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -2332,12 +2332,18 @@ qemuDomainObjPrivateXMLParseJob(virDomainObjPtr vm, xmlXPathContextPtr ctxt) { xmlNodePtr *nodes = NULL; + xmlNodePtr node = ctxt->node; char *tmp = NULL; size_t i; int n; int ret = -1; - if ((tmp = virXPathString("string(./job[1]/@type)", ctxt))) { + if (!(ctxt->node = virXPathNode("./job[1]", ctxt))) { + ret = 0; + goto cleanup; + } + + if ((tmp = virXPathString("string(@type)", ctxt))) { int type; if ((type = qemuDomainJobTypeFromString(tmp)) < 0) { @@ -2349,7 +2355,7 @@ qemuDomainObjPrivateXMLParseJob(virDomainObjPtr vm, priv->job.active = type; } - if ((tmp = virXPathString("string(./job[1]/@async)", ctxt))) { + if ((tmp = virXPathString("string(@async)", ctxt))) { int async; if ((async = qemuDomainAsyncJobTypeFromString(tmp)) < 0) { @@ -2360,7 +2366,7 @@ qemuDomainObjPrivateXMLParseJob(virDomainObjPtr vm, VIR_FREE(tmp); priv->job.asyncJob = async; - if ((tmp = virXPathString("string(./job[1]/@phase)", ctxt))) { + if ((tmp = virXPathString("string(@phase)", ctxt))) { priv->job.phase = qemuDomainAsyncJobPhaseFromString(async, tmp); if (priv->job.phase < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -2371,7 +2377,7 @@ qemuDomainObjPrivateXMLParseJob(virDomainObjPtr vm, } } - if ((n = virXPathNodeSet("./job[1]/disk[@migrating='yes']", ctxt, &nodes)) < 0) + if ((n = virXPathNodeSet("./disk[@migrating='yes']", ctxt, &nodes)) < 0) goto cleanup; if (n > 0) { @@ -2394,6 +2400,7 @@ qemuDomainObjPrivateXMLParseJob(virDomainObjPtr vm, ret = 0; cleanup: + ctxt->node = node; VIR_FREE(tmp); VIR_FREE(nodes); return ret; -- 2.16.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list