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:
parent
53bd38b7c5
commit
28622c9e52
@ -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",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user