diff options
-rw-r--r-- | src/util/system.cpp | 9 | ||||
-rw-r--r-- | src/util/system.h | 7 |
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); |