From 678f6382b86646269c535a616aa7a8cc0e6d5ab4 Mon Sep 17 00:00:00 2001 From: Sven Marnach Date: Thu, 4 Oct 2018 20:03:43 +0200 Subject: [PATCH] io: implement prepare_uninitialized_buffer for Take and Chain (#678) --- tokio-io/src/async_write.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) 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 {