[libvirt] [PATCH v1 21/40] util: pci: use VIR_AUTOPTR for aggregate types

Erik Skultety eskultet at redhat.com
Mon Jul 23 14:26:14 UTC 2018


On Sat, Jul 21, 2018 at 05:36:53PM +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/virpci.c | 51 ++++++++++++++++++---------------------------------
>  1 file changed, 18 insertions(+), 33 deletions(-)
>
> diff --git a/src/util/virpci.c b/src/util/virpci.c
> index 1f6ac0b..7b0964c 100644
> --- a/src/util/virpci.c
> +++ b/src/util/virpci.c
> @@ -490,8 +490,6 @@ virPCIDeviceIterDevices(virPCIDeviceIterPredicate predicate,
>              ret = 1;
>              break;
>          }
> -
> -        virPCIDeviceFree(check);
>      }
>      VIR_DIR_CLOSE(dir);
>      return ret;

...

> @@ -1679,19 +1675,16 @@ virPCIGetAddrString(unsigned int domain,
>                      unsigned int function,
>                      char **pciConfigAddr)
>  {
> -    virPCIDevicePtr dev = NULL;
> -    int ret = -1;
> +    VIR_AUTOPTR(virPCIDevice) dev = NULL;
>
>      dev = virPCIDeviceNew(domain, bus, slot, function);
>      if (dev != NULL) {
>          if (VIR_STRDUP(*pciConfigAddr, dev->name) < 0)
> -            goto cleanup;
> -        ret = 0;
> +            return -1;
> +        return 0;


if (!dev || VIR_STRDUP(*pciConfigAddr, dev->name) < 0))
    return -1;

>      }
>
> - cleanup:
> -    virPCIDeviceFree(dev);
> -    return ret;
> +    return -1;

^return 0;

>  }
>
>  virPCIDevicePtr
> @@ -1962,10 +1955,10 @@ virPCIDeviceListAddCopy(virPCIDeviceListPtr list, virPCIDevicePtr dev)
>
>      if (!copy)
>          return -1;
> -    if (virPCIDeviceListAdd(list, copy) < 0) {
> -        virPCIDeviceFree(copy);
> +    if (virPCIDeviceListAdd(list, copy) < 0)
>          return -1;
> -    }
> +
> +    copy = NULL;

You'll first need to define copy as VIR_AUTOPTR, if you want to use ^this
assignment, otherwise it's a NOP.

There may be some leftovers from the previous patch that will need to go into
this one, otherwise looks fine.

Erik




More information about the libvir-list mailing list