iOS/tvOS/watchOS/visionOS: Fix reading large files

Tested in the iOS simulator with something like:
```
let mut buf = vec![0; c_int::MAX as usize - 1 + 2];
let read_bytes = f.read(&mut buf).unwrap();
```
This commit is contained in:
Mads Marquart 2024-05-06 07:52:57 +02:00
parent 53bd38b7c5
commit 28622c9e52

View File

@ -33,14 +33,15 @@ pub struct FileDesc(OwnedFd);
// with the man page quoting that if the count of bytes to read is // with the man page quoting that if the count of bytes to read is
// greater than `SSIZE_MAX` the result is "unspecified". // greater than `SSIZE_MAX` the result is "unspecified".
// //
// On macOS, however, apparently the 64-bit libc is either buggy or // On Apple targets however, apparently the 64-bit libc is either buggy or
// intentionally showing odd behavior by rejecting any read with a size // intentionally showing odd behavior by rejecting any read with a size
// larger than or equal to INT_MAX. To handle both of these the read // larger than or equal to INT_MAX. To handle both of these the read
// size is capped on both platforms. // size is capped on both platforms.
#[cfg(target_os = "macos")] const READ_LIMIT: usize = if cfg!(target_vendor = "apple") {
const READ_LIMIT: usize = libc::c_int::MAX as usize - 1; libc::c_int::MAX as usize - 1
#[cfg(not(target_os = "macos"))] } else {
const READ_LIMIT: usize = libc::ssize_t::MAX as usize; libc::ssize_t::MAX as usize
};
#[cfg(any( #[cfg(any(
target_os = "dragonfly", target_os = "dragonfly",