| @@ -5,7 +5,6 @@ use crate::io::{self, BorrowedCursor, IoSlice, IoSliceMut, Read}; |
|
|
| 5 |
5 |
use crate::mem; |
| 6 |
6 |
use crate::path::Path; |
| 7 |
7 |
use crate::ptr; |
| 8 |
|
-use crate::slice; |
| 9 |
8 |
use crate::sync::atomic::AtomicUsize; |
| 10 |
9 |
use crate::sync::atomic::Ordering::Relaxed; |
| 11 |
10 |
use crate::sys::c; |
| @@ -479,8 +478,11 @@ impl<'a> AsyncPipe<'a> { |
|
|
| 479 |
478 |
fn schedule_read(&mut self) -> io::Result<bool> { |
| 480 |
479 |
assert_eq!(self.state, State::NotReading); |
| 481 |
480 |
let amt = unsafe { |
| 482 |
|
-let slice = slice_to_end(self.dst); |
| 483 |
|
-self.pipe.read_overlapped(slice, &mut *self.overlapped)? |
|
481 |
+if self.dst.capacity() == self.dst.len() { |
|
482 |
+let additional = if self.dst.capacity() == 0 { 16 } else { 1 }; |
|
483 |
+self.dst.reserve(additional); |
|
484 |
+} |
|
485 |
+self.pipe.read_overlapped(self.dst.spare_capacity_mut(), &mut *self.overlapped)? |
| 484 |
486 |
}; |
| 485 |
487 |
|
| 486 |
488 |
// If this read finished immediately then our overlapped event will |
| @@ -560,15 +562,3 @@ impl<'a> Drop for AsyncPipe<'a> { |
|
|
| 560 |
562 |
} |
| 561 |
563 |
} |
| 562 |
564 |
} |
| 563 |
|
- |
| 564 |
|
-#[allow(unsafe_op_in_unsafe_fn)] |
| 565 |
|
-unsafe fn slice_to_end(v: &mut Vec<u8>) -> &mut [u8] { |
| 566 |
|
-if v.capacity() == 0 { |
| 567 |
|
- v.reserve(16); |
| 568 |
|
-} |
| 569 |
|
-if v.capacity() == v.len() { |
| 570 |
|
- v.reserve(1); |
| 571 |
|
-} |
| 572 |
|
-// FIXME: Isn't this just spare_capacity_mut but worse? |
| 573 |
|
- slice::from_raw_parts_mut(v.as_mut_ptr().add(v.len()), v.capacity() - v.len()) |
| 574 |
|
-} |