From da31579d0b1fb1bbeb9c475a64c52dcc477cbfbd Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Wed, 19 Oct 2022 13:21:23 +0200 Subject: virshFindDisk: Use virXPathNodeSet instead of xmlXPathEval MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Don't open-code the XPath lookup. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- tools/virsh-domain.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) (limited to 'tools') diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 2386672aa6..3c6d0984c9 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -12639,8 +12639,9 @@ virshFindDisk(const char *doc, int type) { g_autoptr(xmlDoc) xml = NULL; - g_autoptr(xmlXPathObject) obj = NULL; g_autoptr(xmlXPathContext) ctxt = NULL; + g_autofree xmlNodePtr *nodes = NULL; + ssize_t nnodes; xmlNodePtr cur = NULL; size_t i; @@ -12650,21 +12651,17 @@ virshFindDisk(const char *doc, return NULL; } - obj = xmlXPathEval(BAD_CAST "/domain/devices/disk", ctxt); - if (obj == NULL || - obj->type != XPATH_NODESET || - obj->nodesetval == NULL || - obj->nodesetval->nodeNr == 0) { + if ((nnodes = virXPathNodeSet("/domain/devices/disk", ctxt, &nodes)) <= 0) { vshError(NULL, "%s", _("Failed to get disk information")); return NULL; } /* search disk using @path */ - for (i = 0; i < obj->nodesetval->nodeNr; i++) { + for (i = 0; i < nnodes; i++) { bool is_supported = true; if (type == VIRSH_FIND_DISK_CHANGEABLE) { - xmlNodePtr n = obj->nodesetval->nodeTab[i]; + xmlNodePtr n = nodes[i]; is_supported = false; /* Check if the disk is CDROM or floppy disk */ @@ -12680,7 +12677,7 @@ virshFindDisk(const char *doc, continue; } - cur = obj->nodesetval->nodeTab[i]->children; + cur = nodes[i]->children; while (cur != NULL) { if (cur->type == XML_ELEMENT_NODE) { g_autofree char *tmp = NULL; @@ -12696,7 +12693,7 @@ virshFindDisk(const char *doc, } if (STREQ_NULLABLE(tmp, path)) { - xmlNodePtr ret = xmlCopyNode(obj->nodesetval->nodeTab[i], 1); + xmlNodePtr ret = xmlCopyNode(nodes[i], 1); /* drop backing store since they are not needed here */ virshDiskDropBackingStore(ret); return ret; -- cgit v1.2.1