Narrow the scope of the ReadFile unsafe block
This commit is contained in:
parent
a33abbba98
commit
2043de12a3
1 changed files with 12 additions and 11 deletions
|
@ -143,7 +143,7 @@ impl Handle {
|
||||||
) -> io::Result<Option<usize>> {
|
) -> io::Result<Option<usize>> {
|
||||||
// SAFETY: We have exclusive access to the buffer and it's up to the caller to
|
// SAFETY: We have exclusive access to the buffer and it's up to the caller to
|
||||||
// ensure the OVERLAPPED pointer is valid for the lifetime of this function.
|
// ensure the OVERLAPPED pointer is valid for the lifetime of this function.
|
||||||
unsafe {
|
let (res, amt) = unsafe {
|
||||||
let len = cmp::min(buf.len(), u32::MAX as usize) as u32;
|
let len = cmp::min(buf.len(), u32::MAX as usize) as u32;
|
||||||
let mut amt = 0;
|
let mut amt = 0;
|
||||||
let res = cvt(c::ReadFile(
|
let res = cvt(c::ReadFile(
|
||||||
|
@ -153,16 +153,17 @@ impl Handle {
|
||||||
&mut amt,
|
&mut amt,
|
||||||
overlapped,
|
overlapped,
|
||||||
));
|
));
|
||||||
match res {
|
(res, amt)
|
||||||
Ok(_) => Ok(Some(amt as usize)),
|
};
|
||||||
Err(e) => {
|
match res {
|
||||||
if e.raw_os_error() == Some(c::ERROR_IO_PENDING as i32) {
|
Ok(_) => Ok(Some(amt as usize)),
|
||||||
Ok(None)
|
Err(e) => {
|
||||||
} else if e.raw_os_error() == Some(c::ERROR_BROKEN_PIPE as i32) {
|
if e.raw_os_error() == Some(c::ERROR_IO_PENDING as i32) {
|
||||||
Ok(Some(0))
|
Ok(None)
|
||||||
} else {
|
} else if e.raw_os_error() == Some(c::ERROR_BROKEN_PIPE as i32) {
|
||||||
Err(e)
|
Ok(Some(0))
|
||||||
}
|
} else {
|
||||||
|
Err(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue