From 205fe5e7ea72afb089f38232876e932cc3ee5fac Mon Sep 17 00:00:00 2001 From: arvidn Date: Sun, 15 Oct 2017 15:19:25 +0200 Subject: [PATCH] fix full allocation failure on APFS --- ChangeLog | 2 ++ src/file.cpp | 26 ++++++++++++++++---------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3f4e5d323..1e3af50e9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,6 @@ + * fix full allocation failure on APFS + 1.1.5 release * fix infinite loop when parsing certain invalid magnet links diff --git a/src/file.cpp b/src/file.cpp index f0affe05a..1374be743 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -2115,17 +2115,23 @@ typedef struct _FILE_ALLOCATED_RANGE_BUFFER { fstore_t f = {F_ALLOCATECONTIG, F_PEOFPOSMODE, 0, s, 0}; if (fcntl(native_handle(), F_PREALLOCATE, &f) < 0) { - if (errno != ENOSPC) + // It appears Apple's new filesystem (APFS) does not + // support this control message and fails with EINVAL + // if so, just skip it + if (errno != EINVAL) { - ec.assign(errno, system_category()); - return false; - } - // ok, let's try to allocate non contiguous space then - f.fst_flags = F_ALLOCATEALL; - if (fcntl(native_handle(), F_PREALLOCATE, &f) < 0) - { - ec.assign(errno, system_category()); - return false; + if (errno != ENOSPC) + { + ec.assign(errno, system_category()); + return false; + } + // ok, let's try to allocate non contiguous space then + f.fst_flags = F_ALLOCATEALL; + if (fcntl(native_handle(), F_PREALLOCATE, &f) < 0) + { + ec.assign(errno, system_category()); + return false; + } } } #endif // F_PREALLOCATE