]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
cmdStartGetFDs: Modernize
authorPeter Krempa <pkrempa@redhat.com>
Thu, 27 Jan 2022 16:14:32 +0000 (17:14 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 17 Feb 2022 14:53:58 +0000 (15:53 +0100)
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@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
tools/virsh-domain.c

index 4ff531f891f3a6bb2fd7e7cf64cd7e4df150b49e..77eac86f6a8a78598312e574645064c1d769e2b1 100644 (file)
@@ -4025,7 +4025,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;
 
@@ -4040,23 +4040,19 @@ cmdStartGetFDs(vshControl *ctl,
         return -1;
     }
 
-    for (i = 0; fdlist[i] != NULL; i++) {
-        int fd;
-        if (virStrToLong_i(fdlist[i], NULL, 10, &fd) < 0) {
+    nfds = g_strv_length(fdlist);
+    fds = g_new0(int, nfds);
+
+    for (i = 0; i < nfds; i++) {
+        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