diff --git a/tokio-io/src/async_write.rs b/tokio-io/src/async_write.rs index 245bea7e5..6fcf418a0 100644 --- a/tokio-io/src/async_write.rs +++ b/tokio-io/src/async_write.rs @@ -172,17 +172,22 @@ impl AsyncWrite for std_io::Sink { } } -// TODO: Implement `prepare_uninitialized_buffer` for `io::Take`. -// This is blocked on rust-lang/rust#27269 impl AsyncRead for std_io::Take { + unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [u8]) -> bool { + self.get_ref().prepare_uninitialized_buffer(buf) + } } -// TODO: Implement `prepare_uninitialized_buffer` when upstream exposes inner -// parts impl AsyncRead for std_io::Chain where T: AsyncRead, U: AsyncRead, { + unsafe fn prepare_uninitialized_buffer(&self, buf: &mut [u8]) -> bool { + let (t, u) = self.get_ref(); + // We don't need to execute the second initializer if the first one + // already zeroed the buffer out. + t.prepare_uninitialized_buffer(buf) || u.prepare_uninitialized_buffer(buf) + } } impl AsyncWrite for std_io::BufWriter {