Calculate the length of the FD list beforehand to avoid multiple
expansions and mainly simplify the code and use automatic freeing to
remove the error code path.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
tools/virsh-domain.c | 18 +++++++-----------
1 file changed, 7 insertions(+), 11 deletions(-)
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 43d310f2af..b4cb7193a7 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -4021,7 +4021,7 @@ cmdStartGetFDs(vshControl *ctl,
{
const char *fdopt;
g_auto(GStrv) fdlist = NULL;
- int *fds = NULL;
+ g_autofree int *fds = NULL;
size_t nfds = 0;
size_t i;
@@ -4036,23 +4036,19 @@ cmdStartGetFDs(vshControl *ctl,
return -1;
}
+ nfds = g_strv_length(fdlist);
+ fds = g_new0(int, nfds);
+
for (i = 0; fdlist[i] != NULL; i++) {
- int fd;
- if (virStrToLong_i(fdlist[i], NULL, 10, &fd) < 0) {
+ if (virStrToLong_i(fdlist[i], NULL, 10, fds + i) < 0) {
vshError(ctl, _("Unable to parse FD number '%s'"),
fdlist[i]);
- goto error;
+ return -1;
}
- VIR_EXPAND_N(fds, nfds, 1);
- fds[nfds - 1] = fd;
}
- *fdsret = fds;
+ *fdsret = g_steal_pointer(&fds);
*nfdsret = nfds;
return 0;
-
- error:
- VIR_FREE(fds);
- return -1;
}
static bool
--
2.34.1