From 057999ef8771fd647962c21e8b0ad6effb05c7fe Mon Sep 17 00:00:00 2001 From: "Zheng, Lei" Date: Fri, 21 Jun 2019 10:21:44 +0800 Subject: [PATCH] Base::FileInfo: fix left overs in transient directory Setting ReadWrite permssion removes executable permission, causing error when removing directory on Linux. --- src/Base/FileInfo.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Base/FileInfo.cpp b/src/Base/FileInfo.cpp index 11a69c1cb9e0..2c41117a2abe 100644 --- a/src/Base/FileInfo.cpp +++ b/src/Base/FileInfo.cpp @@ -526,7 +526,7 @@ bool FileInfo::deleteDirectory(void) const #elif defined (FC_OS_LINUX) || defined(FC_OS_CYGWIN) || defined(FC_OS_MACOSX) || defined(FC_OS_BSD) return rmdir(FileName.c_str()) == 0; #else -# error "FileInfo::createDirectory() not implemented for this platform!" +# error "FileInfo::rmdir() not implemented for this platform!" #endif } @@ -537,7 +537,12 @@ bool FileInfo::deleteDirectoryRecursive(void) const for (std::vector::iterator It = List.begin();It!=List.end();++It) { if (It->isDir()) { - It->setPermissions(FileInfo::ReadWrite); + // At least on Linux, directory needs execute permission to be + // deleted. We don't really need to set permission for directory + // anyway, since FC code does not touch directory permission. + // + // It->setPermissions(FileInfo::ReadWrite); + It->deleteDirectoryRecursive(); } else if (It->isFile()) {