From: Peter Krempa Date: Wed, 19 Oct 2022 11:21:23 +0000 (+0200) Subject: virshFindDisk: Use virXPathNodeSet instead of xmlXPathEval X-Git-Tag: v9.0.0-rc1~232 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=da31579d0b1fb1bbeb9c475a64c52dcc477cbfbd;p=thirdparty%2Flibvirt.git virshFindDisk: Use virXPathNodeSet instead of xmlXPathEval Don't open-code the XPath lookup. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- 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;