mirror of https://github.com/aria2/aria2
MacOS: Allocate once (apfs compat)
parent
d508e41198
commit
992944257c
|
@ -525,12 +525,10 @@ void AbstractDiskWriter::allocate(int64_t offset, int64_t length, bool sparse)
|
||||||
fileStrerror(errNum).c_str()));
|
fileStrerror(errNum).c_str()));
|
||||||
}
|
}
|
||||||
#elif defined(__APPLE__) && defined(__MACH__)
|
#elif defined(__APPLE__) && defined(__MACH__)
|
||||||
auto toalloc = offset + length - size();
|
const auto toalloc = offset + length - size();
|
||||||
while (toalloc > 0) {
|
|
||||||
fstore_t fstore = {
|
fstore_t fstore = {
|
||||||
F_ALLOCATECONTIG | F_ALLOCATEALL, F_PEOFPOSMODE, 0,
|
F_ALLOCATECONTIG | F_ALLOCATEALL, F_PEOFPOSMODE,
|
||||||
// Allocate in 1GB chunks or else some OSX versions may choke.
|
0, toalloc, 0};
|
||||||
std::min(toalloc, (int64_t)1 << 30), 0};
|
|
||||||
if (fcntl(fd_, F_PREALLOCATE, &fstore) == -1) {
|
if (fcntl(fd_, F_PREALLOCATE, &fstore) == -1) {
|
||||||
// Retry non-contig.
|
// Retry non-contig.
|
||||||
fstore.fst_flags = F_ALLOCATEALL;
|
fstore.fst_flags = F_ALLOCATEALL;
|
||||||
|
@ -542,8 +540,6 @@ void AbstractDiskWriter::allocate(int64_t offset, int64_t length, bool sparse)
|
||||||
error_code::FILE_IO_ERROR);
|
error_code::FILE_IO_ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
toalloc -= fstore.fst_bytesalloc;
|
|
||||||
}
|
|
||||||
// This forces the allocation on disk.
|
// This forces the allocation on disk.
|
||||||
ftruncate(fd_, offset + length);
|
ftruncate(fd_, offset + length);
|
||||||
#elif HAVE_FALLOCATE
|
#elif HAVE_FALLOCATE
|
||||||
|
|
Loading…
Reference in New Issue