[libvirt] [PATCH v1 32/32] util: qemu: use VIR_AUTOPTR for aggregate types

Erik Skultety eskultet at redhat.com
Tue Aug 7 08:52:58 UTC 2018


On Sat, Jul 28, 2018 at 11:31:47PM +0530, Sukrit Bhatnagar wrote:
> 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 at gmail.com>
> ---
>  src/util/virqemu.c | 24 ++++++++++--------------
>  1 file changed, 10 insertions(+), 14 deletions(-)
>
> diff --git a/src/util/virqemu.c b/src/util/virqemu.c
> index 4089b8e..cb42d38 100644
> --- a/src/util/virqemu.c
> +++ b/src/util/virqemu.c
> @@ -56,7 +56,7 @@ virQEMUBuildCommandLineJSONArrayBitmap(const char *key,
>  {
>      ssize_t pos = -1;
>      ssize_t end;
> -    virBitmapPtr bitmap = NULL;
> +    VIR_AUTOPTR(virBitmap) bitmap = NULL;
>
>      if (virJSONValueGetArrayAsBitmap(array, &bitmap) < 0)
>          return -1;
> @@ -73,8 +73,6 @@ virQEMUBuildCommandLineJSONArrayBitmap(const char *key,
>          }
>      }
>
> -    virBitmapFree(bitmap);
> -
>      return 0;
>  }

Reviewed-by: Erik Skultety <eskultet at redhat.com>

>
> @@ -267,21 +265,19 @@ virQEMUBuildObjectCommandlineFromJSON(virBufferPtr buf,
>  char *
>  virQEMUBuildDriveCommandlineFromJSON(virJSONValuePtr srcdef)
>  {
> -    virBuffer buf = VIR_BUFFER_INITIALIZER;
> -    char *ret = NULL;
> +    VIR_AUTOPTR(virBuffer) buf = NULL;
>
> -    if (virQEMUBuildCommandLineJSON(srcdef, &buf,
> +    if (VIR_ALLOC(buf) < 0)
> +        return NULL;
> +
> +    if (virQEMUBuildCommandLineJSON(srcdef, buf,
>                                      virQEMUBuildCommandLineJSONArrayNumbered) < 0)
> -        goto cleanup;
> +        return NULL;
>
> -    if (virBufferCheckError(&buf) < 0)
> -        goto cleanup;
> +    if (virBufferCheckError(buf) < 0)
> +        return NULL;
>
> -    ret = virBufferContentAndReset(&buf);
> -
> - cleanup:
> -    virBufferFreeAndReset(&buf);
> -    return ret;
> +    return virBufferContentAndReset(buf);

we talked about virBuffer in previous patches, so that will need fixing,
I'll push the hunk above.

Erik




More information about the libvir-list mailing list