Check the return from posix_fallocate and if the filesystem doesn't support it fall back to ftruncate.
Details
Details
Diff Detail
Diff Detail
- Repository
- rL LLVM
Event Timeline
Comment Actions
Please don't duplicate the code in the compile time and runtime checks. Can you do something like
#if defined(HAVE_POSIX_FALLOCATE)
// If we have posix_fallocate use it. Unlike ftruncate it always allocates // space, so we get an error if the disk is full.
int Err = ::posix_fallocate(FD, 0, Size);
if (!Err)
return std::error_code();
if (Err && Err != EOPNOTSUPP)
return std::error_code(Err, std::generic_category()); // Add a comment about which file systems don't support posix_fallocate.
#endif
// Use ftruncate as a fallback. It may or may not allocate space. At least on // OS X with HFS+ it does. if (::ftruncate(FD, Size) == -1) return std::error_code(errno, std::generic_category());