提交 b421a708 编写于 作者: J John Ferlan

virfile: Check for existence of dir in virFileDeleteTree

Commit id 'f1f68ca3' 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.
上级 41d4104d
......@@ -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,
......
......@@ -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;
......
......@@ -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);
......
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册