[libvirt] [PATCH v2 12/32] storage: Use VIR_AUTOFREE for storage backends
John Ferlan
jferlan at redhat.com
Mon Feb 11 12:23:12 UTC 2019
On 2/11/19 5:39 AM, Erik Skultety wrote:
> On Fri, Feb 08, 2019 at 01:37:06PM -0500, John Ferlan wrote:
>> Let's make use of the auto __cleanup capabilities. This also allows
>> for the cleanup of some goto paths.
>>
>> Signed-off-by: John Ferlan <jferlan at redhat.com>
>> ---
>
>> @@ -459,15 +454,15 @@ virStorageBackendLogicalFindPoolSourcesFunc(char **const groups,
>> void *data)
>> {
>> virStoragePoolSourceListPtr sourceList = data;
>> - char *pvname = NULL;
>> - char *vgname = NULL;
>> size_t i;
>> virStoragePoolSourceDevicePtr dev;
>> virStoragePoolSource *thisSource;
>> + VIR_AUTOFREE(char *) pvname = NULL;
>> + VIR_AUTOFREE(char *) vgname = NULL;
>>
>> if (VIR_STRDUP(pvname, groups[0]) < 0 ||
>> VIR_STRDUP(vgname, groups[1]) < 0)
>> - goto error;
>> + return -1;
>>
>> thisSource = NULL;
>> for (i = 0; i < sourceList->nsources; i++) {
>> @@ -479,30 +474,22 @@ virStorageBackendLogicalFindPoolSourcesFunc(char **const groups,
>>
>> if (thisSource == NULL) {
>> if (!(thisSource = virStoragePoolSourceListNewSource(sourceList)))
>> - goto error;
>> + return -1;
>>
>> - thisSource->name = vgname;
>> + VIR_STEAL_PTR(thisSource->name, vgname);
>> }
>> - else
>> - VIR_FREE(vgname);
>>
>> if (VIR_REALLOC_N(thisSource->devices, thisSource->ndevice + 1) != 0)
>> - goto error;
>> + return -1;
>>
>> dev = &thisSource->devices[thisSource->ndevice];
>> thisSource->ndevice++;
>> thisSource->format = VIR_STORAGE_POOL_LOGICAL_LVM2;
>>
>> memset(dev, 0, sizeof(*dev));
>> - dev->path = pvname;
>> + VIR_STEAL_PTR(dev->path, pvname);
>
> I still don't see why ^this needs to stay and can't be separated into a
> preceding patch.
>
Because in my view/mind - previously there was no problem for pvname in
the success path; however, with this change and without a VIR_STEAL_PTR
there would be a problem.
Moving the VIR_STEAL_PTR to a/the previous patch for this line is a noop
since we never fall through to the err: label.
I suppose if you insist I can move it as it really doesn't matter that
much to me.
>>
>> return 0;
>> -
>> - error:
>> - VIR_FREE(pvname);
>> - VIR_FREE(vgname);
>> -
>> - return -1;
>> }
>
> ...
>
>>
>> diff --git a/src/storage/storage_file_gluster.c b/src/storage/storage_file_gluster.c
>> index f8bbde8cfe..7c2189d297 100644
>> --- a/src/storage/storage_file_gluster.c
>> +++ b/src/storage/storage_file_gluster.c
>> @@ -258,10 +258,10 @@ virStorageFileBackendGlusterReadlinkCallback(const char *path,
>> void *data)
>> {
>> virStorageFileBackendGlusterPrivPtr priv = data;
>> - char *buf = NULL;
>> size_t bufsiz = 0;
>> ssize_t ret;
>> struct stat st;
>> + VIR_AUTOFREE(char *) buf = NULL;
>>
>> *linkpath = NULL;
>>
>> @@ -277,13 +277,13 @@ virStorageFileBackendGlusterReadlinkCallback(const char *path,
>>
>> realloc:
>> if (VIR_EXPAND_N(buf, bufsiz, 256) < 0)
>> - goto error;
>> + return -1;
>>
>> if ((ret = glfs_readlink(priv->vol, path, buf, bufsiz)) < 0) {
>> virReportSystemError(errno,
>> _("failed to read link of gluster file '%s'"),
>> path);
>> - goto error;
>> + return -1;
>> }
>>
>> if (ret == bufsiz)
>> @@ -291,13 +291,9 @@ virStorageFileBackendGlusterReadlinkCallback(const char *path,
>>
>> buf[ret] = '\0';
>>
>> - *linkpath = buf;
>> + VIR_STEAL_PTR(*linkpath, buf);
>
> ^This VIR_STEAL_PTR can also be separated, it doesn't depend on the
> VIR_AUTOFREE stuff, it's a simple 1 change hunk.
>
Same reasoning here.
John
More information about the libvir-list
mailing list