util: Detect posix_fallocate() instead of assuming

Don't assume that `posix_fallocate()` is available on Linux and not
available on other operating systems. At least FreeBSD has it and we
are not using it.

Properly check whether `posix_fallocate()` is present and use it if it
is.
This commit is contained in:
Vasil Dimov
2020-03-26 10:59:46 +01:00
parent 7eed413e72
commit 182dbdf0f4
2 changed files with 18 additions and 2 deletions

View File

@@ -17,7 +17,7 @@
#endif
#ifndef WIN32
// for posix_fallocate
// for posix_fallocate, in configure.ac we check if it is present after this
#ifdef __linux__
#ifdef _POSIX_C_SOURCE
@@ -1012,7 +1012,7 @@ void AllocateFileRange(FILE *file, unsigned int offset, unsigned int length) {
}
ftruncate(fileno(file), static_cast<off_t>(offset) + length);
#else
#if defined(__linux__)
#if defined(HAVE_POSIX_FALLOCATE)
// Version using posix_fallocate
off_t nEndPos = (off_t)offset + length;
if (0 == posix_fallocate(fileno(file), 0, nEndPos)) return;