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@xxxxxxxxxx> --- src/libxl/libxl_driver.c | 41 +++++++++++----------------------------- 1 file changed, 11 insertions(+), 30 deletions(-) diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index 6064436681..7467111618 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -6241,9 +6241,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())) @@ -6252,6 +6249,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; @@ -6270,21 +6269,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); } @@ -6293,30 +6287,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: - virObjectUnref(network); - 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) { @@ -6325,7 +6306,7 @@ libxlGetDHCPInterfaces(virDomainObjPtr vm, } VIR_FREE(ifaces_ret); - goto cleanup; + return -1; } -- 2.23.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list