By making use of GNU C's cleanup attribute handled by the VIR_AUTOPTR macro for declaring aggregate pointer variables, majority of the calls to *Free functions can be dropped, which in turn leads to getting rid of most of our cleanup sections. Signed-off-by: Sukrit Bhatnagar <skrtbhtngr@xxxxxxxxx> --- src/util/viriscsi.c | 100 +++++++++++++++++++--------------------------------- 1 file changed, 36 insertions(+), 64 deletions(-) diff --git a/src/util/viriscsi.c b/src/util/viriscsi.c index 0c2d8bb..8c272b5 100644 --- a/src/util/viriscsi.c +++ b/src/util/viriscsi.c @@ -89,10 +89,10 @@ virISCSIGetSession(const char *devpath, .devpath = devpath, }; int exitstatus = 0; + VIR_AUTOPTR(virCommand) cmd = virCommandNewArgList(ISCSIADM, "--mode", + "session", NULL); VIR_AUTOFREE(char *) error = NULL; - virCommandPtr cmd = virCommandNewArgList(ISCSIADM, "--mode", - "session", NULL); virCommandSetErrorBuffer(cmd, &error); if (virCommandRunRegex(cmd, @@ -101,15 +101,13 @@ virISCSIGetSession(const char *devpath, vars, virISCSIExtractSession, &cbdata, NULL, &exitstatus) < 0) - goto cleanup; + return cbdata.session; if (cbdata.session == NULL && !probe) virReportError(VIR_ERR_INTERNAL_ERROR, _("cannot find iscsiadm session: %s"), NULLSTR(error)); - cleanup: - virCommandFree(cmd); return cbdata.session; } @@ -125,8 +123,8 @@ virStorageBackendIQNFound(const char *initiatoriqn, { int ret = IQN_ERROR; char *line = NULL; - virCommandPtr cmd = virCommandNewArgList(ISCSIADM, - "--mode", "iface", NULL); + VIR_AUTOPTR(virCommand) cmd = virCommandNewArgList(ISCSIADM, + "--mode", "iface", NULL); VIR_AUTOFREE(char *) outbuf = NULL; VIR_AUTOFREE(char *) iqn = NULL; @@ -195,7 +193,6 @@ virStorageBackendIQNFound(const char *initiatoriqn, if (ret == IQN_MISSING) VIR_DEBUG("Could not find interface with IQN '%s'", iqn); - virCommandFree(cmd); return ret; error: @@ -210,8 +207,8 @@ static int virStorageBackendCreateIfaceIQN(const char *initiatoriqn, char **ifacename) { - int ret = -1, exitstatus = -1; - virCommandPtr cmd = NULL; + int exitstatus = -1; + VIR_AUTOPTR(virCommand) cmd = NULL; VIR_AUTOFREE(char *) iface_name = NULL; VIR_AUTOFREE(char *) temp_ifacename = NULL; @@ -236,7 +233,7 @@ virStorageBackendCreateIfaceIQN(const char *initiatoriqn, virReportError(VIR_ERR_INTERNAL_ERROR, _("Failed to run command '%s' to create new iscsi interface"), ISCSIADM); - goto cleanup; + return -1; } virCommandFree(cmd); @@ -255,7 +252,7 @@ virStorageBackendCreateIfaceIQN(const char *initiatoriqn, virReportError(VIR_ERR_INTERNAL_ERROR, _("Failed to run command '%s' to update iscsi interface with IQN '%s'"), ISCSIADM, initiatoriqn); - goto cleanup; + return -1; } /* Check again to make sure the interface was created. */ @@ -263,7 +260,7 @@ virStorageBackendCreateIfaceIQN(const char *initiatoriqn, VIR_DEBUG("Failed to find interface '%s' with IQN '%s' " "after attempting to create it", &temp_ifacename[0], initiatoriqn); - goto cleanup; + return -1; } else { VIR_DEBUG("Interface '%s' with IQN '%s' was created successfully", iface_name, initiatoriqn); @@ -271,12 +268,7 @@ virStorageBackendCreateIfaceIQN(const char *initiatoriqn, VIR_STEAL_PTR(*ifacename, iface_name); - virCommandFree(cmd); return 0; - - cleanup: - virCommandFree(cmd); - return ret; } @@ -286,7 +278,6 @@ virISCSIConnection(const char *portal, const char *target, const char **extraargv) { - int ret = -1; const char *const baseargv[] = { ISCSIADM, "--mode", "node", @@ -294,7 +285,7 @@ virISCSIConnection(const char *portal, "--targetname", target, NULL }; - virCommandPtr cmd; + VIR_AUTOPTR(virCommand) cmd = NULL; VIR_AUTOFREE(char *) ifacename = NULL; cmd = virCommandNewArgs(baseargv); @@ -307,7 +298,7 @@ virISCSIConnection(const char *portal, break; case IQN_MISSING: if (virStorageBackendCreateIfaceIQN(initiatoriqn, &ifacename) != 0) - goto cleanup; + return -1; /* * iscsiadm doesn't let you send commands to the Interface IQN, * unless you've first issued a 'sendtargets' command to the @@ -318,25 +309,20 @@ virISCSIConnection(const char *portal, */ if (virISCSIScanTargetsInternal(portal, ifacename, true, NULL, NULL) < 0) - goto cleanup; + return -1; break; case IQN_ERROR: default: - goto cleanup; + return -1; } virCommandAddArgList(cmd, "--interface", ifacename, NULL); } if (virCommandRun(cmd, NULL) < 0) - goto cleanup; + return -1; - ret = 0; - - cleanup: - virCommandFree(cmd); - - return ret; + return 0; } @@ -363,14 +349,12 @@ virISCSIConnectionLogout(const char *portal, int virISCSIRescanLUNs(const char *session) { - virCommandPtr cmd = virCommandNewArgList(ISCSIADM, - "--mode", "session", - "-r", session, - "-R", - NULL); - int ret = virCommandRun(cmd, NULL); - virCommandFree(cmd); - return ret; + VIR_AUTOPTR(virCommand) cmd = virCommandNewArgList(ISCSIADM, + "--mode", "session", + "-r", session, + "-R", + NULL); + return virCommandRun(cmd, NULL); } @@ -420,12 +404,11 @@ virISCSIScanTargetsInternal(const char *portal, int vars[] = { 2 }; struct virISCSITargetList list; size_t i; - int ret = -1; - virCommandPtr cmd = virCommandNewArgList(ISCSIADM, - "--mode", "discovery", - "--type", "sendtargets", - "--portal", portal, - NULL); + VIR_AUTOPTR(virCommand) cmd = virCommandNewArgList(ISCSIADM, + "--mode", "discovery", + "--type", "sendtargets", + "--portal", portal, + NULL); if (!persist) { virCommandAddArgList(cmd, @@ -447,7 +430,7 @@ virISCSIScanTargetsInternal(const char *portal, vars, virISCSIGetTargets, &list, NULL, NULL) < 0) - goto cleanup; + return -1; if (ntargetsret && targetsret) { *ntargetsret = list.ntargets; @@ -458,10 +441,7 @@ virISCSIScanTargetsInternal(const char *portal, VIR_FREE(list.targets); } - ret = 0; - cleanup: - virCommandFree(cmd); - return ret; + return 0; } @@ -539,9 +519,8 @@ int virISCSINodeNew(const char *portal, const char *target) { - virCommandPtr cmd = NULL; int status; - int ret = -1; + VIR_AUTOPTR(virCommand) cmd = NULL; cmd = virCommandNewArgList(ISCSIADM, "--mode", "node", @@ -554,20 +533,17 @@ virISCSINodeNew(const char *portal, virReportError(VIR_ERR_INTERNAL_ERROR, _("Failed new node mode for target '%s'"), target); - goto cleanup; + return -1; } if (status != 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("%s failed new mode for target '%s' with status '%d'"), ISCSIADM, target, status); - goto cleanup; + return -1; } - ret = 0; - cleanup: - virCommandFree(cmd); - return ret; + return 0; } @@ -577,9 +553,8 @@ virISCSINodeUpdate(const char *portal, const char *name, const char *value) { - virCommandPtr cmd = NULL; int status; - int ret = -1; + VIR_AUTOPTR(virCommand) cmd = NULL; cmd = virCommandNewArgList(ISCSIADM, "--mode", "node", @@ -595,11 +570,8 @@ virISCSINodeUpdate(const char *portal, virReportError(VIR_ERR_INTERNAL_ERROR, _("Failed to update '%s' of node mode for target '%s'"), name, target); - goto cleanup; + return -1; } - ret = 0; - cleanup: - virCommandFree(cmd); - return ret; + return 0; } -- 1.8.3.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list