aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Garzik <jgarzik@exmulti.com>2012-05-12 01:24:27 -0400
committerJeff Garzik <jgarzik@redhat.com>2012-05-16 19:25:25 -0400
commit768e5d52fb295b000940f6a806c3d4bfc3e4f54d (patch)
treecd0ae64786ceb7c363226fee822dad8ae919dd76
parent49232d1abf96f85f785e0ee95fbb79d0338855bc (diff)
Add new utility functions FileCommit(), RenameOver()
-rw-r--r--src/main.h8
-rw-r--r--src/util.cpp21
-rw-r--r--src/util.h2
3 files changed, 24 insertions, 7 deletions
diff --git a/src/main.h b/src/main.h
index 5ac5547a3e..331b16b509 100644
--- a/src/main.h
+++ b/src/main.h
@@ -956,13 +956,7 @@ public:
// Flush stdio buffers and commit to disk before returning
fflush(fileout);
if (!IsInitialBlockDownload() || (nBestHeight+1) % 500 == 0)
- {
-#ifdef WIN32
- _commit(_fileno(fileout));
-#else
- fsync(fileno(fileout));
-#endif
- }
+ FileCommit(fileout);
return true;
}
diff --git a/src/util.cpp b/src/util.cpp
index 823d00a4ee..82c16feda6 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -910,6 +910,27 @@ void CreatePidFile(const boost::filesystem::path &path, pid_t pid)
}
}
+bool RenameOver(boost::filesystem::path src, boost::filesystem::path dest)
+{
+#ifdef WIN32
+ return MoveFileEx(src.string().c_str(), dest.string().c_str(),
+ MOVEFILE_REPLACE_EXISTING);
+#else
+ int rc = std::rename(src.string().c_str(), dest.string().c_str());
+ return (rc == 0);
+#endif /* WIN32 */
+}
+
+void FileCommit(FILE *fileout)
+{
+ fflush(fileout); // harmless if redundantly called
+#ifdef WIN32
+ _commit(_fileno(fileout));
+#else
+ fsync(fileno(fileout));
+#endif
+}
+
int GetFilesize(FILE* file)
{
int nSavePos = ftell(file);
diff --git a/src/util.h b/src/util.h
index 8e65fa7864..f7bdaf5332 100644
--- a/src/util.h
+++ b/src/util.h
@@ -152,7 +152,9 @@ std::string EncodeBase64(const std::string& str);
void ParseParameters(int argc, const char*const argv[]);
bool WildcardMatch(const char* psz, const char* mask);
bool WildcardMatch(const std::string& str, const std::string& mask);
+void FileCommit(FILE *fileout);
int GetFilesize(FILE* file);
+bool RenameOver(boost::filesystem::path src, boost::filesystem::path dest);
boost::filesystem::path GetDefaultDataDir();
const boost::filesystem::path &GetDataDir(bool fNetSpecific = true);
boost::filesystem::path GetConfigFile();