From d718b0b34eda84744778fa12a01d5be5f03753d3 Mon Sep 17 00:00:00 2001 From: PilzAdam Date: Tue, 13 Aug 2013 19:15:06 +0200 Subject: Dont write directly to files but rather write and copy a tmp file --- src/filesys.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/filesys.cpp') diff --git a/src/filesys.cpp b/src/filesys.cpp index 356d3018d..a1795c8ea 100644 --- a/src/filesys.cpp +++ b/src/filesys.cpp @@ -23,6 +23,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include +#include +#include #include "log.h" namespace fs @@ -684,5 +686,28 @@ std::string RemoveRelativePathComponents(std::string path) return path.substr(0, pos); } +bool safeWriteToFile(const std::string &path, const std::string &content) +{ + std::string tmp_file = path + ".~mt"; + + // Write to a tmp file + std::ofstream os(tmp_file.c_str(), std::ios::binary); + if (!os.good()) + return false; + os << content; + os.flush(); + os.close(); + if (os.fail()) + return false; + + // Copy file +#ifdef _WIN32 + remove(path.c_str()); + return (rename(tmp_file.c_str(), path.c_str()) == 0); +#else + return (rename(tmp_file.c_str(), path.c_str()) == 0); +#endif +} + } // namespace fs -- cgit v1.2.3