aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/utils/savefile.cpp
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@nokia.com>2012-08-10 15:56:17 +0200
committerJoerg Bornemann <joerg.bornemann@nokia.com>2012-08-16 17:22:31 +0200
commitf1d0c37565d771e1cbf051e5f2225fc24cdd0d00 (patch)
tree60611f8e703ed8caf6ae00bcc8fd1f5fe02867a2 /src/libs/utils/savefile.cpp
parent958965199924bec357b05ed650bc4f191d8ef353 (diff)
properly sync file's data on commit
this ensures that creator doesn't eat my config files on every crash. Change-Id: I18f8135158e17d064774a49fe170b63c89517e49 Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
Diffstat (limited to 'src/libs/utils/savefile.cpp')
-rw-r--r--src/libs/utils/savefile.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/libs/utils/savefile.cpp b/src/libs/utils/savefile.cpp
index 57750f252cb..ebd310d6794 100644
--- a/src/libs/utils/savefile.cpp
+++ b/src/libs/utils/savefile.cpp
@@ -31,6 +31,11 @@
#include "savefile.h"
#include "qtcassert.h"
#include "fileutils.h"
+#ifdef Q_OS_WIN
+# include <windows.h>
+#else
+# include <unistd.h>
+#endif
namespace Utils {
@@ -78,6 +83,15 @@ bool SaveFile::commit()
QTC_ASSERT(!m_finalized, return false);
m_finalized = true;
+ if (!flush()) {
+ remove();
+ return false;
+ }
+#ifdef Q_OS_WIN
+ FlushFileBuffers(handle());
+#else
+ fdatasync(handle());
+#endif
close();
if (error() != NoError) {
remove();