aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/util/system.cpp9
-rw-r--r--src/util/system.h7
2 files changed, 16 insertions, 0 deletions
diff --git a/src/util/system.cpp b/src/util/system.cpp
index 01c588b0d3..43c6ae54ab 100644
--- a/src/util/system.cpp
+++ b/src/util/system.cpp
@@ -1043,6 +1043,15 @@ bool FileCommit(FILE *file)
return true;
}
+void DirectoryCommit(const fs::path &dirname)
+{
+#ifndef WIN32
+ FILE* file = fsbridge::fopen(dirname, "r");
+ fsync(fileno(file));
+ fclose(file);
+#endif
+}
+
bool TruncateFile(FILE *file, unsigned int length) {
#if defined(WIN32)
return _chsize(_fileno(file), length) == 0;
diff --git a/src/util/system.h b/src/util/system.h
index d2373998df..029204f01e 100644
--- a/src/util/system.h
+++ b/src/util/system.h
@@ -62,6 +62,13 @@ void PrintExceptionContinue(const std::exception *pex, const char* pszThread);
* feature analogous to fsync().
*/
bool FileCommit(FILE *file);
+
+/**
+ * Sync directory contents. This is required on some environments to ensure that
+ * newly created files are committed to disk.
+ */
+void DirectoryCommit(const fs::path &dirname);
+
bool TruncateFile(FILE *file, unsigned int length);
int RaiseFileDescriptorLimit(int nMinFD);
void AllocateFileRange(FILE *file, unsigned int offset, unsigned int length);