From 5096d8de034a11c5d7e35fd7e6fde75c168f5e3f Mon Sep 17 00:00:00 2001 From: Joerg Sonnenberger Date: Fri, 5 May 2017 17:55:58 +0000 Subject: [PATCH] If posix_fallocate returns EOPNOTSUPP, fallback to ftruncate. This can happen at least on NetBSD. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302263 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Support/Unix/Path.inc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/Support/Unix/Path.inc b/lib/Support/Unix/Path.inc index 93f8982196b..fa28ba1b6ab 100644 --- a/lib/Support/Unix/Path.inc +++ b/lib/Support/Unix/Path.inc @@ -421,14 +421,15 @@ std::error_code resize_file(int FD, uint64_t Size) { #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. - if (int Err = ::posix_fallocate(FD, 0, Size)) - return std::error_code(Err, std::generic_category()); -#else + if (int Err = ::posix_fallocate(FD, 0, Size)) { + if (Err != EOPNOTSUPP) + return std::error_code(Err, std::generic_category()); + } +#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()); -#endif return std::error_code(); } -- 2.40.0