]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
lxcContainerSetReadOnly: Refactor cleanup handling
authorPeter Krempa <pkrempa@redhat.com>
Tue, 3 Aug 2021 13:46:46 +0000 (15:46 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 9 Aug 2021 08:09:01 +0000 (10:09 +0200)
Turn 'mounts' into a proper GStrv after sorting so that automatic
cleanup can be used and shuffle around the cleanup steps so that jumps
can be avoided in favor of direct return of error code.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/lxc/lxc_container.c

index 1cadfe70e0457396eb3592d4b86d875a82b8dff1..d788e771962ffefda9b85d57c9cf373ac94c5423 100644 (file)
@@ -773,8 +773,7 @@ static int lxcContainerSetReadOnly(void)
     FILE *procmnt;
     struct mntent mntent;
     char mntbuf[1024];
-    int ret = -1;
-    char **mounts = NULL;
+    g_auto(GStrv) mounts = NULL;
     size_t nmounts = 0;
     size_t i;
 
@@ -797,13 +796,16 @@ static int lxcContainerSetReadOnly(void)
         VIR_APPEND_ELEMENT(mounts, nmounts, tmp);
     }
 
-    if (!mounts) {
-        ret = 0;
-        goto cleanup;
-    }
+    endmntent(procmnt);
+
+    if (!mounts)
+        return 0;
+
+    qsort(mounts, nmounts, sizeof(mounts[0]), virStringSortRevCompare);
 
-    qsort(mounts, nmounts, sizeof(mounts[0]),
-          virStringSortRevCompare);
+    /* turn 'mounts' into a proper GStrv */
+    VIR_EXPAND_N(mounts, nmounts, 1);
+    nmounts--;
 
     for (i = 0; i < nmounts; i++) {
         VIR_DEBUG("Bind readonly %s", mounts[i]);
@@ -811,16 +813,11 @@ static int lxcContainerSetReadOnly(void)
             virReportSystemError(errno,
                                  _("Failed to make mount %s readonly"),
                                  mounts[i]);
-            goto cleanup;
+            return -1;
         }
     }
 
-    ret = 0;
- cleanup:
-    virStringListFreeCount(mounts, nmounts);
-    endmntent(procmnt);
-    return ret;
-
+    return 0;
 }