[libvirt PATCH 1/2] virQEMUCapsGetMachineTypesCaps: Use GPtrArray

Tim Wiederhake twiederh at redhat.com
Thu Jul 8 14:28:27 UTC 2021


This simplyfies the code a bit and removes one "goto", one "VIR_FREE",
and one "VIR_INSERT_ELEMENT_COPY".

Signed-off-by: Tim Wiederhake <twiederh at redhat.com>
---
 src/qemu/qemu_capabilities.c | 37 ++++++++++++++++++------------------
 1 file changed, 18 insertions(+), 19 deletions(-)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index d1cd8f11ac..04dae7d66e 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -942,6 +942,7 @@ virQEMUCapsGetMachineTypesCaps(virQEMUCaps *qemuCaps,
 {
     size_t i;
     virQEMUCapsAccel *accel;
+    g_autoptr(GPtrArray) array = NULL;
 
     /* Guest capabilities do not report TCG vs. KVM caps separately. We just
      * take the set of machine types we probed first. */
@@ -953,13 +954,13 @@ virQEMUCapsGetMachineTypesCaps(virQEMUCaps *qemuCaps,
     *machines = NULL;
     *nmachines = accel->nmachineTypes;
 
-    if (*nmachines)
-        *machines = g_new0(virCapsGuestMachine *, accel->nmachineTypes);
+    if (*nmachines == 0)
+        return 0;
+
+    array = g_ptr_array_sized_new(*nmachines);
 
     for (i = 0; i < accel->nmachineTypes; i++) {
-        virCapsGuestMachine *mach;
-        mach = g_new0(virCapsGuestMachine, 1);
-        (*machines)[i] = mach;
+        virCapsGuestMachine *mach = g_new0(virCapsGuestMachine, 1);
         if (accel->machineTypes[i].alias) {
             mach->name = g_strdup(accel->machineTypes[i].alias);
             mach->canonical = g_strdup(accel->machineTypes[i].name);
@@ -968,6 +969,7 @@ virQEMUCapsGetMachineTypesCaps(virQEMUCaps *qemuCaps,
         }
         mach->maxCpus = accel->machineTypes[i].maxCpus;
         mach->deprecated = accel->machineTypes[i].deprecated;
+        g_ptr_array_add(array, mach);
     }
 
     /* Make sure all canonical machine types also have their own entry so that
@@ -975,18 +977,19 @@ virQEMUCapsGetMachineTypesCaps(virQEMUCaps *qemuCaps,
      * supported machine types.
      */
     i = 0;
-    while (i < *nmachines) {
+    while (i < array->len) {
         size_t j;
         bool found = false;
-        virCapsGuestMachine *machine = (*machines)[i];
+        virCapsGuestMachine *machine = g_ptr_array_index(array, i);
 
         if (!machine->canonical) {
             i++;
             continue;
         }
 
-        for (j = 0; j < *nmachines; j++) {
-            if (STREQ(machine->canonical, (*machines)[j]->name)) {
+        for (j = 0; j < array->len; j++) {
+            virCapsGuestMachine *mach = g_ptr_array_index(array, j);
+            if (STREQ(machine->canonical, mach->name)) {
                 found = true;
                 break;
             }
@@ -995,25 +998,21 @@ virQEMUCapsGetMachineTypesCaps(virQEMUCaps *qemuCaps,
         if (!found) {
             virCapsGuestMachine *mach;
             mach = g_new0(virCapsGuestMachine, 1);
-            if (VIR_INSERT_ELEMENT_COPY(*machines, i, *nmachines, mach) < 0) {
-                VIR_FREE(mach);
-                goto error;
-            }
             mach->name = g_strdup(machine->canonical);
             mach->maxCpus = machine->maxCpus;
             mach->deprecated = machine->deprecated;
+            g_ptr_array_insert(array, i, mach);
             i++;
         }
         i++;
     }
 
-    return 0;
+    *nmachines = array->len;
+    *machines = g_new0(virCapsGuestMachine *, accel->nmachineTypes);
+    for (i = 0; i < array->len; ++i)
+        (*machines)[i] = g_ptr_array_remove_index(array, i);
 
- error:
-    virCapabilitiesFreeMachines(*machines, *nmachines);
-    *nmachines = 0;
-    *machines = NULL;
-    return -1;
+    return 0;
 }
 
 
-- 
2.31.1




More information about the libvir-list mailing list