diff --git a/src/conf/node_device_conf.h b/src/conf/node_device_conf.h index bf7939fbb30f0adc7bb4482c97015892484e58e0..4ff616ee90f06a825a1e0ca0bfd7c586c2ac2f43 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 b630be4399123e9a679506e41ca70484eede9858..fda77ede242d1f1f395f958c679f345582f4eb0f 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; }