diff options
author | Oswald Buddenhagen <oswald.buddenhagen@nokia.com> | 2012-08-10 15:56:17 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@nokia.com> | 2012-08-16 17:22:31 +0200 |
commit | f1d0c37565d771e1cbf051e5f2225fc24cdd0d00 (patch) | |
tree | 60611f8e703ed8caf6ae00bcc8fd1f5fe02867a2 /src/libs/utils/savefile.cpp | |
parent | 958965199924bec357b05ed650bc4f191d8ef353 (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.cpp | 14 |
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(); |