summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorPeter Krempa <pkrempa@redhat.com>2022-10-19 13:21:23 +0200
committerPeter Krempa <pkrempa@redhat.com>2022-12-02 16:49:25 +0100
commitda31579d0b1fb1bbeb9c475a64c52dcc477cbfbd (patch)
treed95fd1a06f4d80ce823ae6bd140a9db58269d56c /tools
parent3dd4971e299a0e6637061b4588942f8905cda507 (diff)
downloadlibvirt-da31579d0b1fb1bbeb9c475a64c52dcc477cbfbd.tar.gz
virshFindDisk: Use virXPathNodeSet instead of xmlXPathEval
Don't open-code the XPath lookup. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/virsh-domain.c17
1 files changed, 7 insertions, 10 deletions
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;