From: Jonathon Jongsma Date: Fri, 10 Jan 2020 21:51:07 +0000 (-0600) Subject: nodedev: Use autofree for more local variables X-Git-Tag: v6.1.0-rc1~457 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d7da92a9cec7d48361b9dac2c13eea93d689db6a;p=thirdparty%2Flibvirt.git nodedev: Use autofree for more local variables Simplify function logic by using g_autofree to free local variables so that we can remove some goto statements that are used for cleanup. Introduce a g_autoptr cleanup function for virNodeDeviceDef. Signed-off-by: Jonathon Jongsma Reviewed-by: Erik Skultety --- diff --git a/src/conf/node_device_conf.h b/src/conf/node_device_conf.h index bf7939fbb3..4ff616ee90 100644 --- a/src/conf/node_device_conf.h +++ b/src/conf/node_device_conf.h @@ -344,6 +344,8 @@ virNodeDeviceGetWWNs(virNodeDeviceDefPtr def, void virNodeDeviceDefFree(virNodeDeviceDefPtr def); +G_DEFINE_AUTOPTR_CLEANUP_FUNC(virNodeDeviceDef, virNodeDeviceDefFree); + void virNodeDevCapsDefFree(virNodeDevCapsDefPtr caps); diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c index b630be4399..fda77ede24 100644 --- a/src/node_device/node_device_driver.c +++ b/src/node_device/node_device_driver.c @@ -106,10 +106,9 @@ int nodeConnectIsAlive(virConnectPtr conn G_GNUC_UNUSED) static int nodeDeviceUpdateDriverName(virNodeDeviceDefPtr def) { - char *driver_link = NULL; - char *devpath = NULL; + g_autofree char *driver_link = NULL; + g_autofree char *devpath = NULL; char *p; - int ret = -1; VIR_FREE(def->driver); @@ -117,26 +116,20 @@ nodeDeviceUpdateDriverName(virNodeDeviceDefPtr def) /* Some devices don't have an explicit driver, so just return without a name */ - if (access(driver_link, R_OK) < 0) { - ret = 0; - goto cleanup; - } + if (access(driver_link, R_OK) < 0) + return 0; if (virFileResolveLink(driver_link, &devpath) < 0) { virReportSystemError(errno, _("cannot resolve driver link %s"), driver_link); - goto cleanup; + return -1; } p = strrchr(devpath, '/'); if (p) def->driver = g_strdup(p + 1); - ret = 0; - cleanup: - VIR_FREE(driver_link); - VIR_FREE(devpath); - return ret; + return 0; } #else /* XXX: Implement me for non-linux */ @@ -468,8 +461,9 @@ nodeDeviceCreateXML(virConnectPtr conn, const char *xmlDesc, unsigned int flags) { - virNodeDeviceDefPtr def = NULL; - char *wwnn = NULL, *wwpn = NULL; + g_autoptr(virNodeDeviceDef) def = NULL; + g_autofree char *wwnn = NULL; + g_autofree char *wwpn = NULL; int parent_host = -1; virNodeDevicePtr device = NULL; const char *virt_type = NULL; @@ -478,19 +472,19 @@ nodeDeviceCreateXML(virConnectPtr conn, virt_type = virConnectGetType(conn); if (!(def = virNodeDeviceDefParseString(xmlDesc, CREATE_DEVICE, virt_type))) - goto cleanup; + return NULL; if (virNodeDeviceCreateXMLEnsureACL(conn, def) < 0) - goto cleanup; + return NULL; if (virNodeDeviceGetWWNs(def, &wwnn, &wwpn) == -1) - goto cleanup; + return NULL; if ((parent_host = virNodeDeviceObjListGetParentHost(driver->devs, def)) < 0) - goto cleanup; + return NULL; if (virVHBAManageVport(parent_host, wwpn, wwnn, VPORT_CREATE) < 0) - goto cleanup; + return NULL; device = nodeDeviceFindNewDevice(conn, wwnn, wwpn); /* We don't check the return value, because one way or another, @@ -501,10 +495,7 @@ nodeDeviceCreateXML(virConnectPtr conn, _("no node device for '%s' with matching " "wwnn '%s' and wwpn '%s'"), def->name, wwnn, wwpn); - cleanup: - virNodeDeviceDefFree(def); - VIR_FREE(wwnn); - VIR_FREE(wwpn); + return device; } @@ -515,8 +506,9 @@ nodeDeviceDestroy(virNodeDevicePtr device) int ret = -1; virNodeDeviceObjPtr obj = NULL; virNodeDeviceDefPtr def; - char *parent = NULL; - char *wwnn = NULL, *wwpn = NULL; + g_autofree char *parent = NULL; + g_autofree char *wwnn = NULL; + g_autofree char *wwpn = NULL; unsigned int parent_host; if (!(obj = nodeDeviceObjFindByName(device->name))) @@ -554,9 +546,6 @@ nodeDeviceDestroy(virNodeDevicePtr device) cleanup: virNodeDeviceObjEndAPI(&obj); - VIR_FREE(parent); - VIR_FREE(wwnn); - VIR_FREE(wwpn); return ret; }