]> xenbits.xensource.com Git - libvirt.git/commitdiff
Introduce VIR_DIR_CLOSE
authorJán Tomko <jtomko@redhat.com>
Tue, 21 Jun 2016 10:40:29 +0000 (12:40 +0200)
committerJán Tomko <jtomko@redhat.com>
Thu, 23 Jun 2016 19:58:33 +0000 (21:58 +0200)
Introduce a helper that only calls closedir if DIR* is non-NULL
and sets it to NULL afterwards.

31 files changed:
cfg.mk
src/conf/network_conf.c
src/conf/nwfilter_conf.c
src/conf/storage_conf.c
src/conf/virdomainobjlist.c
src/conf/virsecretobj.c
src/libvirt_private.syms
src/network/bridge_driver.c
src/openvz/openvz_conf.c
src/qemu/qemu_driver.c
src/qemu/qemu_hostdev.c
src/storage/storage_backend.c
src/storage/storage_backend_fs.c
src/storage/storage_backend_iscsi.c
src/storage/storage_backend_scsi.c
src/util/vircgroup.c
src/util/virfile.c
src/util/virfile.h
src/util/virhostcpu.c
src/util/virnetdev.c
src/util/virnetdevtap.c
src/util/virnuma.c
src/util/virpci.c
src/util/virprocess.c
src/util/virscsi.c
src/util/virusb.c
src/util/virutil.c
src/xen/xen_inotify.c
src/xen/xm_internal.c
tests/virschematest.c
tools/nss/libvirt_nss.c

diff --git a/cfg.mk b/cfg.mk
index 5d9b554c67bfd82655e3e08135e3792143d9ea64..e93114c83e18d73086cbb696cb6be1c7b2e52749 100644 (file)
--- a/cfg.mk
+++ b/cfg.mk
@@ -421,9 +421,9 @@ sc_prohibit_gethostname:
          $(_sc_search_regexp)
 
 sc_prohibit_readdir:
-       @prohibit='\breaddir *\('                                       \
+       @prohibit='\b(read|close)dir *\('                               \
        exclude='exempt from syntax-check'                              \
-       halt='use virDirRead, not readdir'                              \
+       halt='use virDirRead and VIR_DIR_CLOSE'                         \
          $(_sc_search_regexp)
 
 sc_prohibit_gettext_noop:
index 02b8cd7039da8cacbc70c79ec0a0cceca02490b0..1e4b7198b27b38cf670f4c9f713ad53e041311f2 100644 (file)
@@ -3258,7 +3258,7 @@ virNetworkLoadAllState(virNetworkObjListPtr nets,
         virNetworkObjEndAPI(&net);
     }
 
-    closedir(dir);
+    VIR_DIR_CLOSE(dir);
     return ret;
 }
 
@@ -3298,7 +3298,7 @@ int virNetworkLoadAllConfigs(virNetworkObjListPtr nets,
         virNetworkObjEndAPI(&net);
     }
 
-    closedir(dir);
+    VIR_DIR_CLOSE(dir);
     return ret;
 }
 
index 3f90f65d1fbe4f45c119fa5f89817e77e457bc9c..56f8b86f7108d1cef83608e508f8954d5b01a261 100644 (file)
@@ -3227,7 +3227,7 @@ virNWFilterLoadAllConfigs(virNWFilterObjListPtr nwfilters,
             virNWFilterObjUnlock(nwfilter);
     }
 
-    closedir(dir);
+    VIR_DIR_CLOSE(dir);
     return ret;
 }
 
index 69321952f09aa08e8a21c94c45ca9a24b505339a..5c044d26534bdd3bc54db55d77672edf0b903193 100644 (file)
@@ -1964,7 +1964,7 @@ virStoragePoolLoadAllState(virStoragePoolObjListPtr pools,
         virStoragePoolObjUnlock(pool);
     }
 
-    closedir(dir);
+    VIR_DIR_CLOSE(dir);
     return ret;
 }
 
@@ -2015,7 +2015,7 @@ virStoragePoolLoadAllConfigs(virStoragePoolObjListPtr pools,
         VIR_FREE(autostartLink);
     }
 
-    closedir(dir);
+    VIR_DIR_CLOSE(dir);
     return ret;
 }
 
index 485671e74b53bd3ff7d9a1ee10e148742bdcafb4..4f7756d64e8d8d4abcfbd9d022163f6c14f0b1b2 100644 (file)
@@ -616,7 +616,7 @@ virDomainObjListLoadAllConfigs(virDomainObjListPtr doms,
         }
     }
 
-    closedir(dir);
+    VIR_DIR_CLOSE(dir);
     virObjectUnlock(doms);
     return ret;
 }
index c46d22c112d2b7514ef26283f9e2d8580e798034..46042eb6319a0e0d8e60d187812ec44ddbe28e6f 100644 (file)
@@ -1000,6 +1000,6 @@ virSecretLoadAllConfigs(virSecretObjListPtr secrets,
         virSecretObjEndAPI(&secret);
     }
 
-    closedir(dir);
+    VIR_DIR_CLOSE(dir);
     return 0;
 }
index b118d1e3d730f4f1d50deacc2e1fa1d06ce30e48..366a45b9d47ba0f3989f574a760a4e2d50b78734 100644 (file)
@@ -1493,6 +1493,7 @@ saferead;
 safewrite;
 safezero;
 virBuildPathInternal;
+virDirClose;
 virDirCreate;
 virDirRead;
 virFileAbsPath;
index 7c8d2cc9d561dc80441662428adf12f026353f1d..7b021d84f6f421364b7f9372074b9e637131d766 100644 (file)
@@ -577,7 +577,7 @@ networkMigrateStateFiles(virNetworkDriverStatePtr driver)
 
     ret = 0;
  cleanup:
-    closedir(dir);
+    VIR_DIR_CLOSE(dir);
     VIR_FREE(oldPath);
     VIR_FREE(newPath);
     VIR_FREE(contents);
index 820dc2291088a2000aa9939fffa7068fb6dd5d75..ff5e5b891b17b5b4973b2b61e6b6f38df917e4f1 100644 (file)
@@ -1072,7 +1072,7 @@ static int openvzAssignUUIDs(void)
             openvzSetUUID(vpsid);
     }
 
-    closedir(dp);
+    VIR_DIR_CLOSE(dp);
     VIR_FREE(conf_dir);
     return ret;
 }
index ee717f052a6cf2c120cf5c5a5eb66e839498a82d..9657b553a930af771f2c0da186133f61b8b669a9 100644 (file)
@@ -587,8 +587,7 @@ qemuDomainSnapshotLoad(virDomainObjPtr vm,
 
     ret = 0;
  cleanup:
-    if (dir)
-        closedir(dir);
+    VIR_DIR_CLOSE(dir);
     VIR_FREE(snapDir);
     virObjectUnref(caps);
     virObjectUnlock(vm);
index e16d5fd0274aea9685b1cacfcea1af3c0a8661e7..84f36159c8f25fad8818585607a20b3b43a38a87 100644 (file)
@@ -134,9 +134,7 @@ qemuHostdevHostSupportsPassthroughVFIO(void)
     ret = true;
 
  cleanup:
-    if (iommuDir)
-        closedir(iommuDir);
-
+    VIR_DIR_CLOSE(iommuDir);
     return ret;
 }
 
index d041530521888ba96dc4495403ce2afc24683826..4774f5f104d1dd4f2fe49f7f9d639c383751621b 100644 (file)
@@ -1946,12 +1946,12 @@ virStorageBackendStablePath(virStoragePoolObjPtr pool,
         if (virAsprintf(&stablepath, "%s/%s",
                         pool->def->target.path,
                         dent->d_name) == -1) {
-            closedir(dh);
+            VIR_DIR_CLOSE(dh);
             return NULL;
         }
 
         if (virFileLinkPointsTo(stablepath, devpath)) {
-            closedir(dh);
+            VIR_DIR_CLOSE(dh);
             return stablepath;
         }
 
@@ -1963,7 +1963,7 @@ virStorageBackendStablePath(virStoragePoolObjPtr pool,
         goto retry;
     }
 
-    closedir(dh);
+    VIR_DIR_CLOSE(dh);
 
  ret_strdup:
     /* Couldn't find any matching stable link so give back
index a11df365b0432f4644b10c551c3d40d21a8d8172..152f9f32abb03ce09ec42f6c58c0f657e1767a10 100644 (file)
@@ -972,8 +972,7 @@ virStorageBackendFileSystemRefresh(virConnectPtr conn ATTRIBUTE_UNUSED,
     }
     if (direrr < 0)
         goto cleanup;
-    closedir(dir);
-    dir = NULL;
+    VIR_DIR_CLOSE(dir);
     vol = NULL;
 
     if (VIR_ALLOC(target))
@@ -1019,8 +1018,7 @@ virStorageBackendFileSystemRefresh(virConnectPtr conn ATTRIBUTE_UNUSED,
 
     ret = 0;
  cleanup:
-    if (dir)
-        closedir(dir);
+    VIR_DIR_CLOSE(dir);
     VIR_FORCE_CLOSE(fd);
     virStorageVolDefFree(vol);
     virStorageSourceFree(target);
index e3a41b62a30f5a77254667ff15941ea433f91e89..ad8633e3eab8e84be99c7edd0ddf040e2620d87f 100644 (file)
@@ -122,7 +122,7 @@ virStorageBackendISCSIGetHostNumber(const char *sysfs_path,
     if (direrr < 0)
         retval = -1;
 
-    closedir(sysdir);
+    VIR_DIR_CLOSE(sysdir);
  out:
     return retval;
 }
index be993f19d49cfc06b5dda2f5a06c26ecd1d2dc02..b08d96096da4f21be0cea1f7cf40dce5c630cc56 100644 (file)
@@ -290,8 +290,7 @@ getNewStyleBlockDevice(const char *lun_path,
     retval = 0;
 
  cleanup:
-    if (block_dir)
-        closedir(block_dir);
+    VIR_DIR_CLOSE(block_dir);
     VIR_FREE(block_path);
     return retval;
 }
@@ -387,8 +386,7 @@ getBlockDevice(uint32_t host,
     retval = 0;
 
  cleanup:
-    if (lun_dir)
-        closedir(lun_dir);
+    VIR_DIR_CLOSE(lun_dir);
     VIR_FREE(lun_path);
     return retval;
 }
@@ -501,7 +499,7 @@ virStorageBackendSCSIFindLUs(virStoragePoolObjPtr pool,
             found++;
     }
 
-    closedir(devicedir);
+    VIR_DIR_CLOSE(devicedir);
 
     if (retval < 0)
         return -1;
index 7bab08659f68b9f78a1bfc7b2c4f03e3b96f626b..c76c94f68a2bd7b53fe05e0823cf6cebd4ca08fa 100644 (file)
@@ -3409,7 +3409,7 @@ virCgroupRemoveRecursively(char *grppath)
         VIR_ERROR(_("Failed to readdir for %s (%d)"), grppath, errno);
     }
 
-    closedir(grpdir);
+    VIR_DIR_CLOSE(grpdir);
 
     VIR_DEBUG("Removing cgroup %s", grppath);
     if (rmdir(grppath) != 0 && errno != ENOENT) {
@@ -3669,9 +3669,7 @@ virCgroupKillRecursiveInternal(virCgroupPtr group,
  cleanup:
     virCgroupFree(&subgroup);
     VIR_FREE(keypath);
-    if (dp)
-        closedir(dp);
-
+    VIR_DIR_CLOSE(dp);
     return ret;
 }
 
@@ -3993,15 +3991,13 @@ int virCgroupSetOwner(virCgroupPtr cgroup,
         }
 
         VIR_FREE(base);
-        closedir(dh);
-        dh = NULL;
+        VIR_DIR_CLOSE(dh);
     }
 
     ret = 0;
 
  cleanup:
-    if (dh)
-        closedir(dh);
+    VIR_DIR_CLOSE(dh);
     VIR_FREE(entry);
     VIR_FREE(base);
     return ret;
index f47bf391c9084f6232e0c35874eab9d286d66d95..ce8f7fd860b5707ccf03195a54bfee4ae060233c 100644 (file)
@@ -667,8 +667,7 @@ static int virFileLoopDeviceOpenSearch(char **dev_name)
         VIR_DEBUG("No free loop devices available");
         VIR_FREE(looppath);
     }
-    if (dh)
-        closedir(dh);
+    VIR_DIR_CLOSE(dh);
     return fd;
 }
 
@@ -807,7 +806,7 @@ virFileNBDDeviceFindUnused(void)
                          _("No free NBD devices"));
 
  cleanup:
-    closedir(dh);
+    VIR_DIR_CLOSE(dh);
     return ret;
 }
 
@@ -994,7 +993,7 @@ int virFileDeleteTree(const char *dir)
 
  cleanup:
     VIR_FREE(filepath);
-    closedir(dh);
+    VIR_DIR_CLOSE(dh);
     return ret;
 }
 
@@ -2770,6 +2769,15 @@ int virDirRead(DIR *dirp, struct dirent **ent, const char *name)
     return !!*ent;
 }
 
+void virDirClose(DIR **dirp)
+{
+    if (!*dirp)
+        return;
+
+    closedir(*dirp); /* exempt from syntax-check */
+    *dirp = NULL;
+}
+
 static int
 virFileMakePathHelper(char *path, mode_t mode)
 {
index dae234e2e486b4627339a3a4a786980493ae64aa..ab9eeba33027fa037ce5bb89b63b6e2ab0f444b2 100644 (file)
@@ -232,6 +232,9 @@ int virDirCreate(const char *path, mode_t mode, uid_t uid, gid_t gid,
                  unsigned int flags) ATTRIBUTE_RETURN_CHECK;
 int virDirRead(DIR *dirp, struct dirent **ent, const char *dirname)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
+void virDirClose(DIR **dirp)
+    ATTRIBUTE_NONNULL(1);
+# define VIR_DIR_CLOSE(dir)  virDirClose(&(dir))
 
 int virFileMakePath(const char *path) ATTRIBUTE_RETURN_CHECK;
 int virFileMakePathWithMode(const char *path,
index 0cdba0a0cd8791df1673a6e31c116831cc720fe1..6883466b70f86d3870c3425f33681d1b8c6e04d1 100644 (file)
@@ -477,8 +477,7 @@ virHostCPUParseNode(const char *node,
     ret = processors;
 
  cleanup:
-    if (cpudir)
-        closedir(cpudir);
+    VIR_DIR_CLOSE(cpudir);
     if (cores_maps)
         for (i = 0; i < sock_max; i++)
             virBitmapFree(cores_maps[i]);
@@ -774,8 +773,7 @@ virHostCPUGetInfoPopulateLinux(FILE *cpuinfo,
     ret = 0;
 
  cleanup:
-    if (nodedir)
-        closedir(nodedir);
+    VIR_DIR_CLOSE(nodedir);
     virBitmapFree(present_cpus_map);
     virBitmapFree(online_cpus_map);
     VIR_FREE(sysfs_nodedir);
index 5a4ccc62e34044119933cc796cd22b921c247741..75ec484a4a0ece575fd2591e420af7669a19f8d5 100644 (file)
@@ -3188,7 +3188,7 @@ virNetDevRDMAFeature(const char *ifname,
     ret = 0;
 
  cleanup:
-    closedir(dirp);
+    VIR_DIR_CLOSE(dirp);
     VIR_FREE(eth_devpath);
     VIR_FREE(ib_devpath);
     VIR_FREE(eth_res_buf);
index b34cbb7e8ad3a908f430bcb536c7b811e18811a6..eec7614f54c04f97b2414f8df259a109b38d879f 100644 (file)
@@ -144,7 +144,7 @@ virNetDevTapGetRealDeviceName(char *ifname ATTRIBUTE_UNUSED)
  cleanup:
     VIR_FREE(devpath);
     VIR_FORCE_CLOSE(fd);
-    closedir(dirp);
+    VIR_DIR_CLOSE(dirp);
     return ret;
 #else
     return NULL;
index 23064ff377898a445aa1c8f2464be79ee12784a9..b756f7f24278e5b2a9ce6601f160ebcbdec078fd 100644 (file)
@@ -833,8 +833,7 @@ virNumaGetPages(int node,
     VIR_FREE(tmp_free);
     VIR_FREE(tmp_avail);
     VIR_FREE(tmp_size);
-    if (dir)
-        closedir(dir);
+    VIR_DIR_CLOSE(dir);
     VIR_FREE(path);
     return ret;
 }
index 095d7068c24407f74733f0dcb5c25a8c569f59d4..5cb5d3ab09f483b78c99f5bff1ccaa33f06d7917 100644 (file)
@@ -509,7 +509,7 @@ virPCIDeviceIterDevices(virPCIDeviceIterPredicate predicate,
 
         virPCIDeviceFree(check);
     }
-    closedir(dir);
+    VIR_DIR_CLOSE(dir);
     return ret;
 }
 
@@ -1993,8 +1993,7 @@ int virPCIDeviceFileIterate(virPCIDevicePtr dev,
     ret = 0;
 
  cleanup:
-    if (dir)
-        closedir(dir);
+    VIR_DIR_CLOSE(dir);
     VIR_FREE(file);
     VIR_FREE(pcidir);
     return ret;
@@ -2051,8 +2050,7 @@ virPCIDeviceAddressIOMMUGroupIterate(virPCIDeviceAddressPtr orig,
 
  cleanup:
     VIR_FREE(groupPath);
-    if (groupDir)
-        closedir(groupDir);
+    VIR_DIR_CLOSE(groupDir);
     return ret;
 }
 
@@ -2713,7 +2711,7 @@ virPCIGetNetName(char *device_link_sysfs_path, char **netname)
         break;
     }
 
-    closedir(dir);
+    VIR_DIR_CLOSE(dir);
 
  out:
     VIR_FREE(pcidev_sysfs_net_path);
index bf6a6df8a6fa92b5592fe484d71af780a7227637..b0ca1ce38af06656e1be786a90a2bea9f1cf4464 100644 (file)
@@ -637,8 +637,7 @@ int virProcessGetPids(pid_t pid, size_t *npids, pid_t **pids)
     ret = 0;
 
  cleanup:
-    if (dir)
-        closedir(dir);
+    VIR_DIR_CLOSE(dir);
     VIR_FREE(taskPath);
     if (ret < 0)
         VIR_FREE(*pids);
index 66b901791b5961e75de3ef4a2ebc21609d6164a8..72a56614a3eedf9ba668c30c12d0edb2b0e6b715 100644 (file)
@@ -143,8 +143,7 @@ virSCSIDeviceGetSgName(const char *sysfs_prefix,
     }
 
  cleanup:
-    if (dir)
-        closedir(dir);
+    VIR_DIR_CLOSE(dir);
     VIR_FREE(path);
     return sg;
 }
@@ -189,8 +188,7 @@ virSCSIDeviceGetDevName(const char *sysfs_prefix,
     }
 
  cleanup:
-    if (dir)
-        closedir(dir);
+    VIR_DIR_CLOSE(dir);
     VIR_FREE(path);
     return name;
 }
index 5c39667920390a7aa17bb4e2862171ff9895db90..33b188e624884c47013b6605933b4f1fcb2d706b 100644 (file)
@@ -202,9 +202,7 @@ virUSBDeviceSearch(unsigned int vendor,
     ret = list;
 
  cleanup:
-    if (dir)
-        closedir(dir);
-
+    VIR_DIR_CLOSE(dir);
     if (!ret)
         virObjectUnref(list);
     return ret;
index 60da17b2f90df06e44d485263ab4cb85793c792d..a6c1273fd27cd4e1a79ec7dff7645c03b8b8f5a5 100644 (file)
@@ -1915,7 +1915,7 @@ virFindSCSIHostByPCI(const char *sysfs_prefix,
     }
 
  cleanup:
-    closedir(dir);
+    VIR_DIR_CLOSE(dir);
     VIR_FREE(unique_path);
     VIR_FREE(host_link);
     VIR_FREE(host_path);
@@ -2265,7 +2265,7 @@ virGetFCHostNameByWWN(const char *sysfs_prefix,
 
  cleanup:
 # undef READ_WWN
-    closedir(dir);
+    VIR_DIR_CLOSE(dir);
     VIR_FREE(wwnn_path);
     VIR_FREE(wwpn_path);
     VIR_FREE(wwnn_buf);
@@ -2354,7 +2354,7 @@ virFindFCHostCapableVport(const char *sysfs_prefix)
     }
 
  cleanup:
-    closedir(dir);
+    VIR_DIR_CLOSE(dir);
     VIR_FREE(max_vports);
     VIR_FREE(vports);
     return ret;
index d81a35d427783801e2fc259eaaca3d9730cd83c9..cd169e01e1f21dce9d7e89e611d09099d889772b 100644 (file)
@@ -372,21 +372,21 @@ xenInotifyOpen(virConnectPtr conn,
 
             /* Build the full file path */
             if (!(path = virFileBuildPath(priv->configDir, ent->d_name, NULL))) {
-                closedir(dh);
+                VIR_DIR_CLOSE(dh);
                 return -1;
             }
 
             if (xenInotifyAddDomainConfigInfo(conn, path, now) < 0) {
                 virReportError(VIR_ERR_INTERNAL_ERROR,
                                "%s", _("Error adding file to config list"));
-                closedir(dh);
+                VIR_DIR_CLOSE(dh);
                 VIR_FREE(path);
                 return -1;
             }
 
             VIR_FREE(path);
         }
-        closedir(dh);
+        VIR_DIR_CLOSE(dh);
         if (direrr < 0)
             return -1;
     }
index f7486b5c25e511e5852046df40e3dd2cdc3e8182..e7ac57e659cb3470782c49743c7ed55eed5087b9 100644 (file)
@@ -358,7 +358,7 @@ xenXMConfigCacheRefresh(virConnectPtr conn)
 
         /* Build the full file path */
         if (!(path = virFileBuildPath(priv->configDir, ent->d_name, NULL))) {
-            closedir(dh);
+            VIR_DIR_CLOSE(dh);
             return -1;
         }
 
@@ -386,7 +386,7 @@ xenXMConfigCacheRefresh(virConnectPtr conn)
     args.priv = priv;
     virHashRemoveSet(priv->configCache, xenXMConfigReaper, &args);
 
-    closedir(dh);
+    VIR_DIR_CLOSE(dh);
 
     return ret;
 }
index 638fd0f43d61d78d06f95b1b2bb9a2d1c84e2b8e..14a9e2031b78048005966faec814b2a04dd4e5cd 100644 (file)
@@ -112,7 +112,7 @@ testSchemaDir(const char *schema,
  cleanup:
     VIR_FREE(test_name);
     VIR_FREE(xml_path);
-    closedir(dir);
+    VIR_DIR_CLOSE(dir);
     return ret;
 }
 
index de34bafbe69311d54c30d0919b4a9431de66128b..d179514945d961bce1a5e622e9a8104fb3e6e4e5 100644 (file)
@@ -159,8 +159,7 @@ findLease(const char *name,
         VIR_FREE(path);
     }
 
-    closedir(dir);
-    dir = NULL;
+    VIR_DIR_CLOSE(dir);
 
     nleases = virJSONValueArraySize(leases_array);
     DEBUG("Read %zd leases", nleases);
@@ -231,8 +230,7 @@ findLease(const char *name,
     *errnop = errno;
     VIR_FREE(tmpAddress);
     virJSONValueFree(leases_array);
-    if (dir)
-        closedir(dir);
+    VIR_DIR_CLOSE(dir);
     return ret;
 }