mirror of
https://github.com/RPCSX/llvm.git
synced 2025-03-05 03:19:11 +00:00
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
This commit is contained in:
parent
ace8b39f82
commit
5096d8de03
@ -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();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user