From: John Ferlan Date: Tue, 15 Sep 2015 20:33:36 +0000 (-0400) Subject: virfile: Check for existence of dir in virFileDeleteTree X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=b421a70811b15a2d1853ee7e47069fdef83f7f22;p=libvirt.git virfile: Check for existence of dir in virFileDeleteTree Commit id 'f1f68ca33' added code to remove the directory paths for auto-generated sockets, but that code could be called before the paths were created resulting in generating error messages from virFileDeleteTree indicating that the file doesn't exist. Rather than "enforce" all callers to make the non-NULL and existence checks, modify the virFileDeleteTree API to silently ignore NULL on input and non-existent directory trees. --- diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index ce2c70cb3f..155846e5dc 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5269,14 +5269,12 @@ void qemuProcessStop(virQEMUDriverPtr driver, ignore_value(virAsprintf(&tmppath, "%s/domain-%s", cfg->libDir, vm->def->name)); - if (tmppath) - virFileDeleteTree(tmppath); + virFileDeleteTree(tmppath); VIR_FREE(tmppath); ignore_value(virAsprintf(&tmppath, "%s/domain-%s", cfg->channelTargetDir, vm->def->name)); - if (tmppath) - virFileDeleteTree(tmppath); + virFileDeleteTree(tmppath); VIR_FREE(tmppath); ignore_value(virDomainChrDefForeach(vm->def, diff --git a/src/util/virfile.c b/src/util/virfile.c index 75819d9c8b..fe9f8d4ce9 100644 --- a/src/util/virfile.c +++ b/src/util/virfile.c @@ -934,13 +934,17 @@ int virFileNBDDeviceAssociate(const char *file, */ int virFileDeleteTree(const char *dir) { - DIR *dh = opendir(dir); + DIR *dh; struct dirent *de; char *filepath = NULL; int ret = -1; int direrr; - if (!dh) { + /* Silently return 0 if passed NULL or directory doesn't exist */ + if (!dir || !virFileExists(dir)) + return 0; + + if (!(dh = opendir(dir))) { virReportSystemError(errno, _("Cannot open dir '%s'"), dir); return -1; diff --git a/tests/virhostdevtest.c b/tests/virhostdevtest.c index 1e93819ce7..065b825a55 100644 --- a/tests/virhostdevtest.c +++ b/tests/virhostdevtest.c @@ -65,7 +65,7 @@ myCleanup(void) } if (mgr) { - if (mgr->stateDir && !getenv("LIBVIRT_SKIP_CLEANUP")) + if (!getenv("LIBVIRT_SKIP_CLEANUP")) virFileDeleteTree(mgr->stateDir); virObjectUnref(mgr->activePCIHostdevs); diff --git a/tests/virscsitest.c b/tests/virscsitest.c index a86ca28f4e..88286f17b7 100644 --- a/tests/virscsitest.c +++ b/tests/virscsitest.c @@ -241,7 +241,7 @@ mymain(void) ret = -1; cleanup: - if (tmpdir && getenv("LIBVIRT_SKIP_CLEANUP") == NULL) + if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL) virFileDeleteTree(tmpdir); VIR_FREE(virscsi_prefix); return ret;