[libvirt] [PATCH v2 20/41] util: pci: use VIR_AUTOFREE instead of VIR_FREE for scalar types

Sukrit Bhatnagar skrtbhtngr at gmail.com
Tue Jul 24 15:52:21 UTC 2018


By making use of GNU C's cleanup attribute handled by the
VIR_AUTOFREE macro for declaring scalar variables, majority
of the VIR_FREE calls 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 | 269 ++++++++++++++++++------------------------------------
 1 file changed, 87 insertions(+), 182 deletions(-)

diff --git a/src/util/virpci.c b/src/util/virpci.c
index 46f9905..1b3e52f 100644
--- a/src/util/virpci.c
+++ b/src/util/virpci.c
@@ -253,7 +253,7 @@ int
 virPCIDeviceGetDriverPathAndName(virPCIDevicePtr dev, char **path, char **name)
 {
     int ret = -1;
-    char *drvlink = NULL;
+    VIR_AUTOFREE(char *) drvlink = NULL;
 
     *path = *name = NULL;
     /* drvlink = "/sys/bus/pci/dddd:bb:ss.ff/driver" */
@@ -285,7 +285,6 @@ virPCIDeviceGetDriverPathAndName(virPCIDevicePtr dev, char **path, char **name)
 
     ret = 0;
  cleanup:
-    VIR_FREE(drvlink);
     if (ret < 0) {
         VIR_FREE(*path);
         VIR_FREE(*name);
@@ -375,32 +374,27 @@ virPCIDeviceRead32(virPCIDevicePtr dev, int cfgfd, unsigned int pos)
 static int
 virPCIDeviceReadClass(virPCIDevicePtr dev, uint16_t *device_class)
 {
-    char *path = NULL;
-    char *id_str = NULL;
-    int ret = -1;
+    VIR_AUTOFREE(char *) path = NULL;
+    VIR_AUTOFREE(char *) id_str = NULL;
     unsigned int value;
 
     if (!(path = virPCIFile(dev->name, "class")))
-        return ret;
+        return -1;
 
     /* class string is '0xNNNNNN\n' ... i.e. 9 bytes */
     if (virFileReadAll(path, 9, &id_str) < 0)
-        goto cleanup;
+        return -1;
 
     id_str[8] = '\0';
     if (virStrToLong_ui(id_str, NULL, 16, &value) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("Unusual value in %s/devices/%s/class: %s"),
                        PCI_SYSFS, dev->name, id_str);
-        goto cleanup;
+        return -1;
     }
 
     *device_class = (value >> 8) & 0xFFFF;
-    ret = 0;
- cleanup:
-    VIR_FREE(id_str);
-    VIR_FREE(path);
-    return ret;
+    return 0;
 }
 
 static int
@@ -574,7 +568,7 @@ virPCIDeviceDetectFunctionLevelReset(virPCIDevicePtr dev, int cfgfd)
 {
     uint32_t caps;
     uint8_t pos;
-    char *path;
+    VIR_AUTOFREE(char *) path = NULL;
     int found;
 
     /* The PCIe Function Level Reset capability allows
@@ -614,7 +608,6 @@ virPCIDeviceDetectFunctionLevelReset(virPCIDevicePtr dev, int cfgfd)
         return -1;
 
     found = virFileExists(path);
-    VIR_FREE(path);
     if (found) {
         VIR_DEBUG("%s %s: buggy device didn't advertise FLR, but is a VF; forcing flr on",
                   dev->id, dev->name);
@@ -926,8 +919,8 @@ virPCIDeviceReset(virPCIDevicePtr dev,
                   virPCIDeviceList *activeDevs,
                   virPCIDeviceList *inactiveDevs)
 {
-    char *drvPath = NULL;
-    char *drvName = NULL;
+    VIR_AUTOFREE(char *) drvPath = NULL;
+    VIR_AUTOFREE(char *) drvName = NULL;
     int ret = -1;
     int fd = -1;
     int hdrType = -1;
@@ -1000,8 +993,6 @@ virPCIDeviceReset(virPCIDevicePtr dev,
     }
 
  cleanup:
-    VIR_FREE(drvPath);
-    VIR_FREE(drvName);
     virPCIDeviceConfigClose(dev, fd);
     return ret;
 }
@@ -1011,7 +1002,7 @@ static int
 virPCIProbeStubDriver(virPCIStubDriver driver)
 {
     const char *drvname = NULL;
-    char *drvpath = NULL;
+    VIR_AUTOFREE(char *) drvpath = NULL;
     bool probed = false;
 
     if (driver == VIR_PCI_STUB_DRIVER_NONE ||
@@ -1023,20 +1014,15 @@ virPCIProbeStubDriver(virPCIStubDriver driver)
     }
 
  recheck:
-    if ((drvpath = virPCIDriverDir(drvname)) && virFileExists(drvpath)) {
+    if ((drvpath = virPCIDriverDir(drvname)) && virFileExists(drvpath))
         /* driver already loaded, return */
-        VIR_FREE(drvpath);
         return 0;
-    }
-
-    VIR_FREE(drvpath);
 
     if (!probed) {
-        char *errbuf = NULL;
+        VIR_AUTOFREE(char *) errbuf = NULL;
         probed = true;
         if ((errbuf = virKModLoad(drvname, true))) {
             VIR_WARN("failed to load driver %s: %s", drvname, errbuf);
-            VIR_FREE(errbuf);
             goto cleanup;
         }
 
@@ -1064,38 +1050,30 @@ virPCIProbeStubDriver(virPCIStubDriver driver)
 int
 virPCIDeviceUnbind(virPCIDevicePtr dev)
 {
-    char *path = NULL;
-    char *drvpath = NULL;
-    char *driver = NULL;
-    int ret = -1;
+    VIR_AUTOFREE(char *) path = NULL;
+    VIR_AUTOFREE(char *) drvpath = NULL;
+    VIR_AUTOFREE(char *) driver = NULL;
 
     if (virPCIDeviceGetDriverPathAndName(dev, &drvpath, &driver) < 0)
-        goto cleanup;
+        return -1;
 
-    if (!driver) {
+    if (!driver)
         /* The device is not bound to any driver */
-        ret = 0;
-        goto cleanup;
-    }
+        return 0;
 
     if (!(path = virPCIFile(dev->name, "driver/unbind")))
-        goto cleanup;
+        return -1;
 
     if (virFileExists(path)) {
         if (virFileWriteStr(path, dev->name, 0) < 0) {
             virReportSystemError(errno,
                                  _("Failed to unbind PCI device '%s' from %s"),
                                  dev->name, driver);
-            goto cleanup;
+            return -1;
         }
     }
 
-    ret = 0;
- cleanup:
-    VIR_FREE(path);
-    VIR_FREE(drvpath);
-    VIR_FREE(driver);
-    return ret;
+    return 0;
 }
 
 
@@ -1138,8 +1116,7 @@ static int
 virPCIDeviceBindWithDriverOverride(virPCIDevicePtr dev,
                                    const char *driverName)
 {
-    int ret = -1;
-    char *path;
+    VIR_AUTOFREE(char *) path = NULL;
 
     if (!(path = virPCIFile(dev->name, "driver_override")))
         return -1;
@@ -1149,26 +1126,22 @@ virPCIDeviceBindWithDriverOverride(virPCIDevicePtr dev,
                              _("Failed to add driver '%s' to driver_override "
                                " interface of PCI device '%s'"),
                              driverName, dev->name);
-        goto cleanup;
+        return -1;
     }
 
     if (virPCIDeviceRebind(dev) < 0)
-        goto cleanup;
+        return -1;
 
-    ret = 0;
-
- cleanup:
-    VIR_FREE(path);
-    return ret;
+    return 0;
 }
 
 static int
 virPCIDeviceUnbindFromStubWithNewid(virPCIDevicePtr dev)
 {
     int result = -1;
-    char *drvdir = NULL;
-    char *path = NULL;
-    char *driver = NULL;
+    VIR_AUTOFREE(char *) drvdir = NULL;
+    VIR_AUTOFREE(char *) path = NULL;
+    VIR_AUTOFREE(char *) driver = NULL;
 
     /* If the device is currently bound to one of the "well known"
      * stub drivers, then unbind it, otherwise ignore it.
@@ -1257,10 +1230,6 @@ virPCIDeviceUnbindFromStubWithNewid(virPCIDevicePtr dev)
     dev->remove_slot = false;
     dev->reprobe = false;
 
-    VIR_FREE(drvdir);
-    VIR_FREE(path);
-    VIR_FREE(driver);
-
     return result;
 }
 
@@ -1278,8 +1247,7 @@ virPCIDeviceUnbindFromStubWithOverride(virPCIDevicePtr dev)
 static int
 virPCIDeviceUnbindFromStub(virPCIDevicePtr dev)
 {
-    int ret;
-    char *path;
+    VIR_AUTOFREE(char *) path = NULL;
 
     /*
      * Prefer using the device's driver_override interface, falling back
@@ -1289,12 +1257,9 @@ virPCIDeviceUnbindFromStub(virPCIDevicePtr dev)
         return -1;
 
     if (virFileExists(path))
-        ret = virPCIDeviceUnbindFromStubWithOverride(dev);
-    else
-        ret = virPCIDeviceUnbindFromStubWithNewid(dev);
+        return virPCIDeviceUnbindFromStubWithOverride(dev);
 
-    VIR_FREE(path);
-    return ret;
+    return virPCIDeviceUnbindFromStubWithNewid(dev);
 }
 
 static int
@@ -1302,9 +1267,9 @@ virPCIDeviceBindToStubWithNewid(virPCIDevicePtr dev)
 {
     int result = -1;
     bool reprobe = false;
-    char *stubDriverPath = NULL;
-    char *driverLink = NULL;
-    char *path = NULL; /* reused for different purposes */
+    VIR_AUTOFREE(char *) stubDriverPath = NULL;
+    VIR_AUTOFREE(char *) driverLink = NULL;
+    VIR_AUTOFREE(char *) path = NULL; /* reused for different purposes */
     const char *stubDriverName = NULL;
     virErrorPtr err = NULL;
 
@@ -1436,10 +1401,6 @@ virPCIDeviceBindToStubWithNewid(virPCIDevicePtr dev)
     }
 
  cleanup:
-    VIR_FREE(stubDriverPath);
-    VIR_FREE(driverLink);
-    VIR_FREE(path);
-
     if (result < 0)
         virPCIDeviceUnbindFromStub(dev);
 
@@ -1453,10 +1414,9 @@ virPCIDeviceBindToStubWithNewid(virPCIDevicePtr dev)
 static int
 virPCIDeviceBindToStubWithOverride(virPCIDevicePtr dev)
 {
-    int ret = -1;
     const char *stubDriverName;
-    char *stubDriverPath = NULL;
-    char *driverLink = NULL;
+    VIR_AUTOFREE(char *) stubDriverPath = NULL;
+    VIR_AUTOFREE(char *) driverLink = NULL;
 
     /* Check the device is configured to use one of the known stub drivers */
     if (dev->stubDriver == VIR_PCI_STUB_DRIVER_NONE) {
@@ -1473,35 +1433,28 @@ virPCIDeviceBindToStubWithOverride(virPCIDevicePtr dev)
 
     if (!(stubDriverPath = virPCIDriverDir(stubDriverName))  ||
         !(driverLink = virPCIFile(dev->name, "driver")))
-        goto cleanup;
+        return -1;
 
     if (virFileExists(driverLink)) {
         if (virFileLinkPointsTo(driverLink, stubDriverPath)) {
             /* The device is already bound to the correct driver */
             VIR_DEBUG("Device %s is already bound to %s",
                       dev->name, stubDriverName);
-            ret = 0;
-            goto cleanup;
+            return 0;
         }
     }
 
     if (virPCIDeviceBindWithDriverOverride(dev, stubDriverName) < 0)
-        goto cleanup;
+        return -1;
 
     dev->unbind_from_stub = true;
-    ret = 0;
-
- cleanup:
-    VIR_FREE(stubDriverPath);
-    VIR_FREE(driverLink);
-    return ret;
+    return 0;
 }
 
 static int
 virPCIDeviceBindToStub(virPCIDevicePtr dev)
 {
-    int ret;
-    char *path;
+    VIR_AUTOFREE(char *) path = NULL;
 
     /*
      * Prefer using the device's driver_override interface, falling back
@@ -1511,12 +1464,9 @@ virPCIDeviceBindToStub(virPCIDevicePtr dev)
         return -1;
 
     if (virFileExists(path))
-        ret = virPCIDeviceBindToStubWithOverride(dev);
-    else
-        ret = virPCIDeviceBindToStubWithNewid(dev);
+        return virPCIDeviceBindToStubWithOverride(dev);
 
-    VIR_FREE(path);
-    return ret;
+    return virPCIDeviceBindToStubWithNewid(dev);
 }
 
 /* virPCIDeviceDetach:
@@ -1700,19 +1650,15 @@ virPCIDeviceWaitForCleanup(virPCIDevicePtr dev, const char *matcher)
 static char *
 virPCIDeviceReadID(virPCIDevicePtr dev, const char *id_name)
 {
-    char *path = NULL;
+    VIR_AUTOFREE(char *) path = NULL;
     char *id_str;
 
     if (!(path = virPCIFile(dev->name, id_name)))
         return NULL;
 
     /* ID string is '0xNNNN\n' ... i.e. 7 bytes */
-    if (virFileReadAll(path, 7, &id_str) < 0) {
-        VIR_FREE(path);
+    if (virFileReadAll(path, 7, &id_str) < 0)
         return NULL;
-    }
-
-    VIR_FREE(path);
 
     /* Check for 0x suffix */
     if (id_str[0] != '0' || id_str[1] != 'x') {
@@ -1755,8 +1701,8 @@ virPCIDeviceNew(unsigned int domain,
                 unsigned int function)
 {
     virPCIDevicePtr dev;
-    char *vendor = NULL;
-    char *product = NULL;
+    VIR_AUTOFREE(char *) vendor = NULL;
+    VIR_AUTOFREE(char *) product = NULL;
 
     if (VIR_ALLOC(dev) < 0)
         return NULL;
@@ -1806,14 +1752,12 @@ virPCIDeviceNew(unsigned int domain,
     VIR_DEBUG("%s %s: initialized", dev->id, dev->name);
 
  cleanup:
-    VIR_FREE(product);
-    VIR_FREE(vendor);
     return dev;
 
  error:
     virPCIDeviceFree(dev);
     dev = NULL;
-    goto cleanup;
+    goto cleanup;;
 }
 
 
@@ -2129,8 +2073,7 @@ int virPCIDeviceFileIterate(virPCIDevicePtr dev,
                             virPCIDeviceFileActor actor,
                             void *opaque)
 {
-    char *pcidir = NULL;
-    char *file = NULL;
+    VIR_AUTOFREE(char *) pcidir = NULL;
     DIR *dir = NULL;
     int ret = -1;
     struct dirent *ent;
@@ -2145,6 +2088,7 @@ int virPCIDeviceFileIterate(virPCIDevicePtr dev,
         goto cleanup;
 
     while ((direrr = virDirRead(dir, &ent, pcidir)) > 0) {
+        VIR_AUTOFREE(char *) file = NULL;
         /* Device assignment requires:
          *   $PCIDIR/config, $PCIDIR/resource, $PCIDIR/resourceNNN,
          *   $PCIDIR/rom, $PCIDIR/reset, $PCIDIR/vendor, $PCIDIR/device
@@ -2159,8 +2103,6 @@ int virPCIDeviceFileIterate(virPCIDevicePtr dev,
                 goto cleanup;
             if ((actor)(dev, file, opaque) < 0)
                 goto cleanup;
-
-            VIR_FREE(file);
         }
     }
     if (direrr < 0)
@@ -2170,8 +2112,6 @@ int virPCIDeviceFileIterate(virPCIDevicePtr dev,
 
  cleanup:
     VIR_DIR_CLOSE(dir);
-    VIR_FREE(file);
-    VIR_FREE(pcidir);
     return ret;
 }
 
@@ -2186,7 +2126,7 @@ virPCIDeviceAddressIOMMUGroupIterate(virPCIDeviceAddressPtr orig,
                                      virPCIDeviceAddressActor actor,
                                      void *opaque)
 {
-    char *groupPath = NULL;
+    VIR_AUTOFREE(char *) groupPath = NULL;
     DIR *groupDir = NULL;
     int ret = -1;
     struct dirent *ent;
@@ -2222,7 +2162,6 @@ virPCIDeviceAddressIOMMUGroupIterate(virPCIDeviceAddressPtr orig,
     ret = 0;
 
  cleanup:
-    VIR_FREE(groupPath);
     VIR_DIR_CLOSE(groupDir);
     return ret;
 }
@@ -2341,28 +2280,25 @@ virPCIDeviceAddressGetIOMMUGroupAddresses(virPCIDeviceAddressPtr devAddr,
 int
 virPCIDeviceAddressGetIOMMUGroupNum(virPCIDeviceAddressPtr addr)
 {
-    char *devName = NULL;
-    char *devPath = NULL;
-    char *groupPath = NULL;
+    VIR_AUTOFREE(char *) devName = NULL;
+    VIR_AUTOFREE(char *) devPath = NULL;
+    VIR_AUTOFREE(char *) groupPath = NULL;
     const char *groupNumStr;
     unsigned int groupNum;
-    int ret = -1;
 
     if (virAsprintf(&devName, "%.4x:%.2x:%.2x.%.1x", addr->domain,
                     addr->bus, addr->slot, addr->function) < 0)
-        goto cleanup;
+        return -1;
 
     if (!(devPath = virPCIFile(devName, "iommu_group")))
-        goto cleanup;
-    if (virFileIsLink(devPath) != 1) {
-        ret = -2;
-        goto cleanup;
-    }
+        return -1;
+    if (virFileIsLink(devPath) != 1)
+        return -2;
     if (virFileResolveLink(devPath, &groupPath) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("Unable to resolve device %s iommu_group symlink %s"),
                        devName, devPath);
-        goto cleanup;
+        return -1;
     }
 
     groupNumStr = last_component(groupPath);
@@ -2371,16 +2307,10 @@ virPCIDeviceAddressGetIOMMUGroupNum(virPCIDeviceAddressPtr addr)
                        _("device %s iommu_group symlink %s has "
                          "invalid group number %s"),
                        devName, groupPath, groupNumStr);
-        ret = -1;
-        goto cleanup;
+        return -1;
     }
 
-    ret = groupNum;
- cleanup:
-    VIR_FREE(devName);
-    VIR_FREE(devPath);
-    VIR_FREE(groupPath);
-    return ret;
+    return groupNum;
 }
 
 
@@ -2390,30 +2320,28 @@ virPCIDeviceAddressGetIOMMUGroupNum(virPCIDeviceAddressPtr addr)
 char *
 virPCIDeviceGetIOMMUGroupDev(virPCIDevicePtr dev)
 {
-    char *devPath = NULL;
-    char *groupPath = NULL;
+    VIR_AUTOFREE(char *) devPath = NULL;
+    VIR_AUTOFREE(char *) groupPath = NULL;
     char *groupDev = NULL;
 
     if (!(devPath = virPCIFile(dev->name, "iommu_group")))
-        goto cleanup;
+        return NULL;
     if (virFileIsLink(devPath) != 1) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("Invalid device %s iommu_group file %s is not a symlink"),
                        dev->name, devPath);
-        goto cleanup;
+        return NULL;
     }
     if (virFileResolveLink(devPath, &groupPath) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("Unable to resolve device %s iommu_group symlink %s"),
                        dev->name, devPath);
-        goto cleanup;
+        return NULL;
     }
     if (virAsprintf(&groupDev, "/dev/vfio/%s",
                     last_component(groupPath)) < 0)
-        goto cleanup;
- cleanup:
-    VIR_FREE(devPath);
-    VIR_FREE(groupPath);
+        return NULL;
+
     return groupDev;
 }
 
@@ -2614,7 +2542,7 @@ virPCIGetDeviceAddressFromSysfsLink(const char *device_link)
 {
     virPCIDeviceAddressPtr bdf = NULL;
     char *config_address = NULL;
-    char *device_path = NULL;
+    VIR_AUTOFREE(char *) device_path = NULL;
 
     if (!virFileExists(device_link)) {
         VIR_DEBUG("'%s' does not exist", device_link);
@@ -2631,19 +2559,16 @@ virPCIGetDeviceAddressFromSysfsLink(const char *device_link)
 
     config_address = last_component(device_path);
     if (VIR_ALLOC(bdf) < 0)
-        goto out;
+        return NULL;
 
     if (virPCIDeviceAddressParse(config_address, bdf) < 0) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("Failed to parse PCI config address '%s'"),
                        config_address);
         VIR_FREE(bdf);
-        goto out;
+        return NULL;
     }
 
- out:
-    VIR_FREE(device_path);
-
     return bdf;
 }
 
@@ -2665,7 +2590,7 @@ int
 virPCIGetPhysicalFunction(const char *vf_sysfs_path,
                           virPCIDeviceAddressPtr *pf)
 {
-    char *device_link = NULL;
+    VIR_AUTOFREE(char *) device_link = NULL;
 
     *pf = NULL;
 
@@ -2678,7 +2603,6 @@ virPCIGetPhysicalFunction(const char *vf_sysfs_path,
         VIR_DEBUG("PF for VF device '%s': %.4x:%.2x:%.2x.%.1x", vf_sysfs_path,
                   (*pf)->domain, (*pf)->bus, (*pf)->slot, (*pf)->function);
     }
-    VIR_FREE(device_link);
 
     return 0;
 }
@@ -2695,9 +2619,9 @@ virPCIGetVirtualFunctions(const char *sysfs_path,
 {
     int ret = -1;
     size_t i;
-    char *device_link = NULL;
+    VIR_AUTOFREE(char *) totalvfs_file = NULL;
+    VIR_AUTOFREE(char *) totalvfs_str = NULL;
     virPCIDeviceAddressPtr config_addr = NULL;
-    char *totalvfs_file = NULL, *totalvfs_str = NULL;
 
     *virtual_functions = NULL;
     *num_virtual_functions = 0;
@@ -2719,6 +2643,7 @@ virPCIGetVirtualFunctions(const char *sysfs_path,
     }
 
     do {
+        VIR_AUTOFREE(char *) device_link = NULL;
         /* look for virtfn%d links until one isn't found */
         if (virAsprintf(&device_link, "%s/virtfn%zu", sysfs_path, *num_virtual_functions) < 0)
             goto error;
@@ -2736,18 +2661,13 @@ virPCIGetVirtualFunctions(const char *sysfs_path,
         if (VIR_APPEND_ELEMENT(*virtual_functions, *num_virtual_functions,
                                config_addr) < 0)
             goto error;
-        VIR_FREE(device_link);
-
     } while (1);
 
     VIR_DEBUG("Found %zu virtual functions for %s",
               *num_virtual_functions, sysfs_path);
     ret = 0;
  cleanup:
-    VIR_FREE(device_link);
     VIR_FREE(config_addr);
-    VIR_FREE(totalvfs_file);
-    VIR_FREE(totalvfs_str);
     return ret;
 
  error:
@@ -2765,18 +2685,13 @@ virPCIGetVirtualFunctions(const char *sysfs_path,
 int
 virPCIIsVirtualFunction(const char *vf_sysfs_device_link)
 {
-    char *vf_sysfs_physfn_link = NULL;
-    int ret = -1;
+    VIR_AUTOFREE(char *) vf_sysfs_physfn_link = NULL;
 
     if (virAsprintf(&vf_sysfs_physfn_link, "%s/physfn",
                     vf_sysfs_device_link) < 0)
-        return ret;
+        return -1;
 
-    ret = virFileExists(vf_sysfs_physfn_link);
-
-    VIR_FREE(vf_sysfs_physfn_link);
-
-    return ret;
+    return virFileExists(vf_sysfs_physfn_link);
 }
 
 /*
@@ -2868,12 +2783,12 @@ virPCIGetNetName(const char *device_link_sysfs_path,
                  char *physPortID,
                  char **netname)
 {
-    char *pcidev_sysfs_net_path = NULL;
+    VIR_AUTOFREE(char *) pcidev_sysfs_net_path = NULL;
+    VIR_AUTOFREE(char *) firstEntryName = NULL;
+    VIR_AUTOFREE(char *) thisPhysPortID = NULL;
     int ret = -1;
     DIR *dir = NULL;
     struct dirent *entry = NULL;
-    char *firstEntryName = NULL;
-    char *thisPhysPortID = NULL;
     size_t i = 0;
 
     if (virBuildPath(&pcidev_sysfs_net_path, device_link_sysfs_path,
@@ -2946,9 +2861,6 @@ virPCIGetNetName(const char *device_link_sysfs_path,
     }
  cleanup:
     VIR_DIR_CLOSE(dir);
-    VIR_FREE(pcidev_sysfs_net_path);
-    VIR_FREE(thisPhysPortID);
-    VIR_FREE(firstEntryName);
     return ret;
 }
 
@@ -2959,9 +2871,9 @@ virPCIGetVirtualFunctionInfo(const char *vf_sysfs_device_path,
                              int *vf_index)
 {
     virPCIDeviceAddressPtr pf_config_address = NULL;
-    char *pf_sysfs_device_path = NULL;
-    char *vfname = NULL;
-    char *vfPhysPortID = NULL;
+    VIR_AUTOFREE(char *) pf_sysfs_device_path = NULL;
+    VIR_AUTOFREE(char *) vfname = NULL;
+    VIR_AUTOFREE(char *) vfPhysPortID = NULL;
     int ret = -1;
 
     if (virPCIGetPhysicalFunction(vf_sysfs_device_path, &pf_config_address) < 0)
@@ -3016,9 +2928,6 @@ virPCIGetVirtualFunctionInfo(const char *vf_sysfs_device_path,
     ret = 0;
  cleanup:
     VIR_FREE(pf_config_address);
-    VIR_FREE(pf_sysfs_device_path);
-    VIR_FREE(vfname);
-    VIR_FREE(vfPhysPortID);
 
     return ret;
 }
@@ -3032,8 +2941,7 @@ virPCIGetMdevTypes(const char *sysfspath,
     int dirret = -1;
     DIR *dir = NULL;
     struct dirent *entry;
-    char *types_path = NULL;
-    char *tmppath = NULL;
+    VIR_AUTOFREE(char *) types_path = NULL;
     virMediatedDeviceTypePtr mdev_type = NULL;
     virMediatedDeviceTypePtr *mdev_types = NULL;
     size_t ntypes = 0;
@@ -3051,6 +2959,7 @@ virPCIGetMdevTypes(const char *sysfspath,
     }
 
     while ((dirret = virDirRead(dir, &entry, types_path)) > 0) {
+        VIR_AUTOFREE(char *) tmppath = NULL;
         /* append the type id to the path and read the attributes from there */
         if (virAsprintf(&tmppath, "%s/%s", types_path, entry->d_name) < 0)
             goto cleanup;
@@ -3060,8 +2969,6 @@ virPCIGetMdevTypes(const char *sysfspath,
 
         if (VIR_APPEND_ELEMENT(mdev_types, ntypes, mdev_type) < 0)
             goto cleanup;
-
-        VIR_FREE(tmppath);
     }
 
     if (dirret < 0)
@@ -3075,8 +2982,6 @@ virPCIGetMdevTypes(const char *sysfspath,
     for (i = 0; i < ntypes; i++)
         virMediatedDeviceTypeFree(mdev_types[i]);
     VIR_FREE(mdev_types);
-    VIR_FREE(types_path);
-    VIR_FREE(tmppath);
     VIR_DIR_CLOSE(dir);
     return ret;
 }
-- 
1.8.3.1




More information about the libvir-list mailing list