]> xenbits.xensource.com Git - libvirt.git/commitdiff
libxlGetDHCPInterfaces: Switch to GLib
authorMichal Privoznik <mprivozn@redhat.com>
Wed, 4 Dec 2019 09:26:58 +0000 (10:26 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 17 Dec 2019 15:58:43 +0000 (16:58 +0100)
If we use glib alloc functions, we can drop the 'cleanup' label
and @rv variable and also simplify the code a bit.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Cole Robinson <crobinso@redhat.com>
src/libxl/libxl_driver.c

index b04b1c1bcf572d765edc8d826e2d70cebf879e3b..b2f191b2ac0fd487e90ad86f8381560f4dcca641 100644 (file)
@@ -6234,9 +6234,6 @@ libxlGetDHCPInterfaces(virDomainObjPtr vm,
     g_autoptr(virConnect) conn = NULL;
     virDomainInterfacePtr *ifaces_ret = NULL;
     size_t ifaces_count = 0;
-    int rv = -1;
-    int n_leases = 0;
-    virNetworkDHCPLeasePtr *leases = NULL;
     size_t i;
 
     if (!(conn = virGetConnectNetwork()))
@@ -6245,6 +6242,8 @@ libxlGetDHCPInterfaces(virDomainObjPtr vm,
     for (i = 0; i < vm->def->nnets; i++) {
         g_autoptr(virNetwork) network = NULL;
         char macaddr[VIR_MAC_STRING_BUFLEN];
+        virNetworkDHCPLeasePtr *leases = NULL;
+        int n_leases = 0;
         virDomainInterfacePtr iface = NULL;
         size_t j;
 
@@ -6263,21 +6262,16 @@ libxlGetDHCPInterfaces(virDomainObjPtr vm,
             goto error;
 
         if (n_leases) {
-            if (VIR_EXPAND_N(ifaces_ret, ifaces_count, 1) < 0)
-                goto error;
+            ifaces_ret = g_renew(typeof(*ifaces_ret), ifaces_ret, ifaces_count + 1);
+            ifaces_ret[ifaces_count] = g_new0(typeof(**ifaces_ret), 1);
+            iface = ifaces_ret[ifaces_count];
+            ifaces_count++;
 
-            if (VIR_ALLOC(ifaces_ret[ifaces_count - 1]) < 0)
-                goto error;
-
-            iface = ifaces_ret[ifaces_count - 1];
             /* Assuming each lease corresponds to a separate IP */
             iface->naddrs = n_leases;
 
-            if (VIR_ALLOC_N(iface->addrs, iface->naddrs) < 0)
-                goto error;
-
+            iface->addrs = g_new0(typeof(*iface->addrs), iface->naddrs);
             iface->name = g_strdup(vm->def->nets[i]->ifname);
-
             iface->hwaddr = g_strdup(macaddr);
         }
 
@@ -6286,29 +6280,17 @@ libxlGetDHCPInterfaces(virDomainObjPtr vm,
             virDomainIPAddressPtr ip_addr = &iface->addrs[j];
 
             ip_addr->addr = g_strdup(lease->ipaddr);
-
             ip_addr->type = lease->type;
             ip_addr->prefix = lease->prefix;
-        }
 
-        for (j = 0; j < n_leases; j++)
             virNetworkDHCPLeaseFree(leases[j]);
+        }
 
         VIR_FREE(leases);
     }
 
-    *ifaces = ifaces_ret;
-    ifaces_ret = NULL;
-    rv = ifaces_count;
-
- cleanup:
-    if (leases) {
-        for (i = 0; i < n_leases; i++)
-            virNetworkDHCPLeaseFree(leases[i]);
-    }
-    VIR_FREE(leases);
-
-    return rv;
+    *ifaces = g_steal_pointer(&ifaces_ret);
+    return ifaces_count;
 
  error:
     if (ifaces_ret) {
@@ -6317,7 +6299,7 @@ libxlGetDHCPInterfaces(virDomainObjPtr vm,
     }
     VIR_FREE(ifaces_ret);
 
-    goto cleanup;
+    return -1;
 }