[PATCH 2/5] cmdStartGetFDs: Modernize

Peter Krempa pkrempa at redhat.com
Thu Feb 3 14:51:56 UTC 2022


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 at 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




More information about the libvir-list mailing list