summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/fileutils.cpp
diff options
context:
space:
mode:
authorKatja Marttila <katja.marttila@qt.io>2018-09-24 11:06:14 +0300
committerKatja Marttila <katja.marttila@qt.io>2018-09-24 09:19:54 +0000
commit7ad0627b014f3a2368268546fb246bd55dbd3e8a (patch)
tree28f2f7de13e2bbd75e83bcaf57d7f5fa5770f57b /src/libs/installer/fileutils.cpp
parent6049f98b3d22781800220daca7ae82eff775e9cc (diff)
Delete directory if there are readonly files
Task-number:QTIFW-637 Change-Id: I38b947b10517de68aee5619915886c719cd5e2bf Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'src/libs/installer/fileutils.cpp')
-rw-r--r--src/libs/installer/fileutils.cpp25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/libs/installer/fileutils.cpp b/src/libs/installer/fileutils.cpp
index 58744b3c2..c142b55f1 100644
--- a/src/libs/installer/fileutils.cpp
+++ b/src/libs/installer/fileutils.cpp
@@ -173,14 +173,23 @@ void QInstaller::removeFiles(const QString &path, bool ignoreErrors)
const QFileInfoList entries = QDir(path).entryInfoList(QDir::AllEntries | QDir::Hidden);
foreach (const QFileInfo &fi, entries) {
if (fi.isSymLink() || fi.isFile()) {
- QFile f(fi.filePath());
- if (!f.remove()) {
- const QString errorMessage = QCoreApplication::translate("QInstaller",
- "Cannot remove file \"%1\": %2").arg(
- QDir::toNativeSeparators(f.fileName()), f.errorString());
- if (!ignoreErrors)
- throw Error(errorMessage);
- qWarning().noquote() << errorMessage;
+ QString filePath = fi.filePath();
+ QFile f(filePath);
+ bool ok = f.remove();
+ if (!ok) { //ReadOnly can prevent removing in Windows. Change permission and try again.
+ const QFile::Permissions permissions = f.permissions();
+ if (!(permissions & QFile::WriteUser)) {
+ ok = f.setPermissions(filePath, permissions | QFile::WriteUser)
+ && f.remove(filePath);
+ }
+ if (!ok) {
+ const QString errorMessage = QCoreApplication::translate("QInstaller",
+ "Cannot remove file \"%1\": %2").arg(
+ QDir::toNativeSeparators(f.fileName()), f.errorString());
+ if (!ignoreErrors)
+ throw Error(errorMessage);
+ qWarning().noquote() << errorMessage;
+ }
}
}
}