Let's make use of the auto __cleanup capabilities cleaning up any
now unnecessary goto paths. For virStorageAuthDefCopy use authdef
and ret as consistently as similar other code.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/conf/domain_conf.c | 29 +++++++++++------------------
src/conf/storage_conf.c | 6 ++----
src/qemu/qemu_parse_command.c | 6 ++----
src/util/virstoragefile.c | 33 ++++++++++++++-------------------
src/util/virstoragefile.h | 1 +
5 files changed, 30 insertions(+), 45 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 1fc4c8a35a..5699a60549 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -7578,10 +7578,9 @@ virDomainHostdevSubsysSCSIiSCSIDefParseXML(xmlNodePtr sourcenode,
virDomainHostdevSubsysSCSIPtr def,
xmlXPathContextPtr ctxt)
{
- int ret = -1;
int auth_secret_usage = -1;
xmlNodePtr cur;
- virStorageAuthDefPtr authdef = NULL;
+ VIR_AUTOPTR(virStorageAuthDef) authdef = NULL;
virDomainHostdevSubsysSCSIiSCSIPtr iscsisrc = &def->u.iscsi;
/* For the purposes of command line creation, this needs to look
@@ -7594,23 +7593,23 @@ virDomainHostdevSubsysSCSIiSCSIDefParseXML(xmlNodePtr sourcenode,
if (!(iscsisrc->src->path = virXMLPropString(sourcenode, "name"))) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("missing iSCSI hostdev source path name"));
- goto cleanup;
+ return -1;
}
if (virDomainStorageNetworkParseHosts(sourcenode, &iscsisrc->src->hosts,
&iscsisrc->src->nhosts) < 0)
- goto cleanup;
+ return -1;
if (iscsisrc->src->nhosts < 1) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("missing the host address for the iSCSI hostdev"));
- goto cleanup;
+ return -1;
}
if (iscsisrc->src->nhosts > 1) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("only one source host address may be specified "
"for the iSCSI hostdev"));
- goto cleanup;
+ return -1;
}
cur = sourcenode->children;
@@ -7618,30 +7617,25 @@ virDomainHostdevSubsysSCSIiSCSIDefParseXML(xmlNodePtr sourcenode,
if (cur->type == XML_ELEMENT_NODE &&
virXMLNodeNameEqual(cur, "auth")) {
if (!(authdef = virStorageAuthDefParse(cur, ctxt)))
- goto cleanup;
+ return -1;
if ((auth_secret_usage =
virSecretUsageTypeFromString(authdef->secrettype)) < 0) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("invalid secret type %s"),
authdef->secrettype);
- goto cleanup;
+ return -1;
}
if (auth_secret_usage != VIR_SECRET_USAGE_TYPE_ISCSI) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("hostdev invalid secret type '%s'"),
authdef->secrettype);
- goto cleanup;
+ return -1;
}
- iscsisrc->src->auth = authdef;
- authdef = NULL;
+ VIR_STEAL_PTR(iscsisrc->src->auth, authdef);
}
cur = cur->next;
}
- ret = 0;
-
- cleanup:
- virStorageAuthDefFree(authdef);
- return ret;
+ return 0;
}
static int
@@ -9684,7 +9678,7 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
virStorageEncryptionPtr encryption = NULL;
char *serial = NULL;
char *startupPolicy = NULL;
- virStorageAuthDefPtr authdef = NULL;
+ VIR_AUTOPTR(virStorageAuthDef) authdef = NULL;
char *tray = NULL;
char *removable = NULL;
char *logical_block_size = NULL;
@@ -10094,7 +10088,6 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
VIR_FREE(target);
VIR_FREE(tray);
VIR_FREE(removable);
- virStorageAuthDefFree(authdef);
VIR_FREE(devaddr);
VIR_FREE(serial);
virStorageEncryptionFree(encryption);
diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
index 1ee31ca676..9cd3d836a3 100644
--- a/src/conf/storage_conf.c
+++ b/src/conf/storage_conf.c
@@ -458,7 +458,7 @@ virStoragePoolDefParseSource(xmlXPathContextPtr ctxt,
int nsource;
size_t i;
virStoragePoolOptionsPtr options;
- virStorageAuthDefPtr authdef = NULL;
+ VIR_AUTOPTR(virStorageAuthDef) authdef = NULL;
char *name = NULL;
char *port = NULL;
char *ver = NULL;
@@ -584,8 +584,7 @@ virStoragePoolDefParseSource(xmlXPathContextPtr ctxt,
goto cleanup;
}
- source->auth = authdef;
- authdef = NULL;
+ VIR_STEAL_PTR(source->auth, authdef);
}
/* Option protocol version string (NFSvN) */
@@ -615,7 +614,6 @@ virStoragePoolDefParseSource(xmlXPathContextPtr ctxt,
VIR_FREE(port);
VIR_FREE(nodeset);
- virStorageAuthDefFree(authdef);
return ret;
}
diff --git a/src/qemu/qemu_parse_command.c b/src/qemu/qemu_parse_command.c
index c4650f01e0..81691cb85e 100644
--- a/src/qemu/qemu_parse_command.c
+++ b/src/qemu/qemu_parse_command.c
@@ -59,7 +59,7 @@ qemuParseDriveURIString(virDomainDiskDefPtr def, virURIPtr uri,
char *sock = NULL;
char *volimg = NULL;
char *secret = NULL;
- virStorageAuthDefPtr authdef = NULL;
+ VIR_AUTOPTR(virStorageAuthDef) authdef = NULL;
if (VIR_ALLOC(def->src->hosts) < 0)
goto error;
@@ -133,8 +133,7 @@ qemuParseDriveURIString(virDomainDiskDefPtr def, virURIPtr uri,
if (VIR_STRDUP(authdef->secrettype, secrettype) < 0)
goto error;
}
- def->src->auth = authdef;
- authdef = NULL;
+ VIR_STEAL_PTR(def->src->auth, authdef);
/* Cannot formulate a secretType (eg, usage or uuid) given
* what is provided.
@@ -152,7 +151,6 @@ qemuParseDriveURIString(virDomainDiskDefPtr def, virURIPtr uri,
error:
virStorageNetHostDefClear(def->src->hosts);
VIR_FREE(def->src->hosts);
- virStorageAuthDefFree(authdef);
goto cleanup;
}
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index 8319ba9c8c..b3f5e0204d 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -1879,26 +1879,24 @@ virStorageAuthDefFree(virStorageAuthDefPtr authdef)
virStorageAuthDefPtr
virStorageAuthDefCopy(const virStorageAuthDef *src)
{
- virStorageAuthDefPtr ret;
+ VIR_AUTOPTR(virStorageAuthDef) authdef = NULL;
+ virStorageAuthDefPtr ret = NULL;
- if (VIR_ALLOC(ret) < 0)
+ if (VIR_ALLOC(authdef) < 0)
return NULL;
- if (VIR_STRDUP(ret->username, src->username) < 0)
- goto error;
+ if (VIR_STRDUP(authdef->username, src->username) < 0)
+ return NULL;
/* Not present for storage pool, but used for disk source */
- if (VIR_STRDUP(ret->secrettype, src->secrettype) < 0)
- goto error;
- ret->authType = src->authType;
+ if (VIR_STRDUP(authdef->secrettype, src->secrettype) < 0)
+ return NULL;
+ authdef->authType = src->authType;
- if (virSecretLookupDefCopy(&ret->seclookupdef, &src->seclookupdef) <
0)
- goto error;
+ if (virSecretLookupDefCopy(&authdef->seclookupdef, &src->seclookupdef)
< 0)
+ return NULL;
+ VIR_STEAL_PTR(ret, authdef);
return ret;
-
- error:
- virStorageAuthDefFree(ret);
- return NULL;
}
@@ -1907,7 +1905,7 @@ virStorageAuthDefParse(xmlNodePtr node,
xmlXPathContextPtr ctxt)
{
xmlNodePtr saveNode = ctxt->node;
- virStorageAuthDefPtr authdef = NULL;
+ VIR_AUTOPTR(virStorageAuthDef) authdef = NULL;
virStorageAuthDefPtr ret = NULL;
xmlNodePtr secretnode = NULL;
char *authtype = NULL;
@@ -1958,7 +1956,6 @@ virStorageAuthDefParse(xmlNodePtr node,
cleanup:
VIR_FREE(authtype);
- virStorageAuthDefFree(authdef);
ctxt->node = saveNode;
return ret;
@@ -2832,7 +2829,7 @@ virStorageSourceParseRBDColonString(const char *rbdstr,
{
char *options = NULL;
char *p, *e, *next;
- virStorageAuthDefPtr authdef = NULL;
+ VIR_AUTOPTR(virStorageAuthDef) authdef = NULL;
/* optionally skip the "rbd:" prefix if provided */
if (STRPREFIX(rbdstr, "rbd:"))
@@ -2895,9 +2892,8 @@ virStorageSourceParseRBDColonString(const char *rbdstr,
if (VIR_STRDUP(authdef->secrettype,
virSecretUsageTypeToString(VIR_SECRET_USAGE_TYPE_CEPH)) <
0)
goto error;
- src->auth = authdef;
+ VIR_STEAL_PTR(src->auth, authdef);
src->authInherited = true;
- authdef = NULL;
/* Cannot formulate a secretType (eg, usage or uuid) given
* what is provided.
@@ -2936,7 +2932,6 @@ virStorageSourceParseRBDColonString(const char *rbdstr,
error:
VIR_FREE(options);
- virStorageAuthDefFree(authdef);
return -1;
}
diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
index a98d5103fa..f1164dde9b 100644
--- a/src/util/virstoragefile.h
+++ b/src/util/virstoragefile.h
@@ -543,4 +543,5 @@ void virStorageFileReportBrokenChain(int errcode,
virStorageSourcePtr src,
virStorageSourcePtr parent);
+VIR_DEFINE_AUTOPTR_FUNC(virStorageAuthDef, virStorageAuthDefFree);
#endif /* LIBVIRT_VIRSTORAGEFILE_H */
--
2.20.1