diff options
| author | Chris Denton <chris@chrisdenton.dev> | 2024-07-16 20:24:57 +0000 |
|---|---|---|
| committer | Chris Denton <chris@chrisdenton.dev> | 2024-07-16 20:24:57 +0000 |
| commit | 55c84e39cc22ab70c7e7e44f7ec7d6cadb1abff6 (patch) | |
| tree | c77887e37ed7f89627e8d5807b6d57cbc8aef0ca | |
| parent | 59222346549ff66230d26a489705a27725e526b5 (diff) | |
| download | rust-55c84e39cc22ab70c7e7e44f7ec7d6cadb1abff6.tar.gz rust-55c84e39cc22ab70c7e7e44f7ec7d6cadb1abff6.zip | |
Remove `slice_to_end`
| -rw-r--r-- | library/std/src/sys/pal/windows/handle.rs | 11 | ||||
| -rw-r--r-- | library/std/src/sys/pal/windows/pipe.rs | 20 |
2 files changed, 13 insertions, 18 deletions
diff --git a/library/std/src/sys/pal/windows/handle.rs b/library/std/src/sys/pal/windows/handle.rs index e63f5c9dec2..4553e3a232c 100644 --- a/library/std/src/sys/pal/windows/handle.rs +++ b/library/std/src/sys/pal/windows/handle.rs @@ -138,7 +138,7 @@ impl Handle { pub unsafe fn read_overlapped( &self, - buf: &mut [u8], + buf: &mut [mem::MaybeUninit<u8>], overlapped: *mut c::OVERLAPPED, ) -> io::Result<Option<usize>> { // SAFETY: We have exclusive access to the buffer and it's up to the caller to @@ -146,8 +146,13 @@ impl Handle { unsafe { let len = cmp::min(buf.len(), u32::MAX as usize) as u32; let mut amt = 0; - let res = - cvt(c::ReadFile(self.as_raw_handle(), buf.as_mut_ptr(), len, &mut amt, overlapped)); + let res = cvt(c::ReadFile( + self.as_raw_handle(), + buf.as_mut_ptr().cast::<u8>(), + len, + &mut amt, + overlapped, + )); match res { Ok(_) => Ok(Some(amt as usize)), Err(e) => { diff --git a/library/std/src/sys/pal/windows/pipe.rs b/library/std/src/sys/pal/windows/pipe.rs index 19364617e74..7a309b9638b 100644 --- a/library/std/src/sys/pal/windows/pipe.rs +++ b/library/std/src/sys/pal/windows/pipe.rs @@ -5,7 +5,6 @@ use crate::io::{self, BorrowedCursor, IoSlice, IoSliceMut, Read}; use crate::mem; use crate::path::Path; use crate::ptr; -use crate::slice; use crate::sync::atomic::AtomicUsize; use crate::sync::atomic::Ordering::Relaxed; use crate::sys::c; @@ -479,8 +478,11 @@ impl<'a> AsyncPipe<'a> { fn schedule_read(&mut self) -> io::Result<bool> { assert_eq!(self.state, State::NotReading); let amt = unsafe { - let slice = slice_to_end(self.dst); - self.pipe.read_overlapped(slice, &mut *self.overlapped)? + if self.dst.capacity() == self.dst.len() { + let additional = if self.dst.capacity() == 0 { 16 } else { 1 }; + self.dst.reserve(additional); + } + self.pipe.read_overlapped(self.dst.spare_capacity_mut(), &mut *self.overlapped)? }; // If this read finished immediately then our overlapped event will @@ -560,15 +562,3 @@ impl<'a> Drop for AsyncPipe<'a> { } } } - -#[allow(unsafe_op_in_unsafe_fn)] -unsafe fn slice_to_end(v: &mut Vec<u8>) -> &mut [u8] { - if v.capacity() == 0 { - v.reserve(16); - } - if v.capacity() == v.len() { - v.reserve(1); - } - // FIXME: Isn't this just spare_capacity_mut but worse? - slice::from_raw_parts_mut(v.as_mut_ptr().add(v.len()), v.capacity() - v.len()) -} |
