summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dist/changes-4.7.1.md6
-rw-r--r--src/libs/utils/savefile.cpp27
2 files changed, 26 insertions, 7 deletions
diff --git a/dist/changes-4.7.1.md b/dist/changes-4.7.1.md
index e8eddc27e6..2248727617 100644
--- a/dist/changes-4.7.1.md
+++ b/dist/changes-4.7.1.md
@@ -25,9 +25,15 @@ C++ Support
* Clang Code Model
* Fixed include order for Clang headers
+QML Support
+
+* Fixed that comments could break reformatting (QTCREATORBUG-21036)
+
Debugging
* Fixed remote debugging command line argument (QTCREATORBUG-20928)
+* Fixed environment for `Start and Debug External Application`
+ (QTCREATORBUG-20185)
* GDB
* Fixed GDB built-in pretty printer handling (QTCREATORBUG-20770)
* CDB
diff --git a/src/libs/utils/savefile.cpp b/src/libs/utils/savefile.cpp
index 36b515568e..5864ece3ef 100644
--- a/src/libs/utils/savefile.cpp
+++ b/src/libs/utils/savefile.cpp
@@ -128,19 +128,32 @@ bool SaveFile::commit()
fileName().toStdWString().data(),
nullptr, REPLACEFILE_IGNORE_MERGE_ERRORS, nullptr, nullptr);
if (!result) {
- const DWORD replaceErrorCode = GetLastError();
+ DWORD replaceErrorCode = GetLastError();
QString errorStr;
if (!QFile::exists(finalFileName)) {
// Replace failed because finalFileName does not exist, try rename.
if (!(result = rename(finalFileName)))
errorStr = errorString();
} else {
- wchar_t messageBuffer[256];
- FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
- nullptr, replaceErrorCode,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- messageBuffer, sizeof(messageBuffer), nullptr);
- errorStr = QString::fromWCharArray(messageBuffer);
+ if (replaceErrorCode == ERROR_UNABLE_TO_REMOVE_REPLACED) {
+ // If we do not get the rights to remove the original final file we still might try
+ // to replace the file contents
+ result = MoveFileEx(fileName().toStdWString().data(),
+ finalFileName.toStdWString().data(),
+ MOVEFILE_COPY_ALLOWED
+ | MOVEFILE_REPLACE_EXISTING
+ | MOVEFILE_WRITE_THROUGH);
+ if (!result)
+ replaceErrorCode = GetLastError();
+ }
+ if (!result) {
+ wchar_t messageBuffer[256];
+ FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
+ nullptr, replaceErrorCode,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ messageBuffer, sizeof(messageBuffer), nullptr);
+ errorStr = QString::fromWCharArray(messageBuffer);
+ }
}
if (!result) {
remove();