diff options
| author | Sébastien Paolacci <sebastien.paolacci@gmail.com> | 2013-12-16 19:11:17 +0100 |
|---|---|---|
| committer | Sébastien Paolacci <sebastien.paolacci@gmail.com> | 2013-12-16 19:11:17 +0100 |
| commit | cab687853a63198e5de9aa094d4ac01d068d0285 (patch) | |
| tree | 583a009887a1bcbdd2dd444a6dd378ddab52ccf7 | |
| parent | 8d52dfbace05c46754f4f6bb5a25f55906c9d7b0 (diff) | |
| download | rust-cab687853a63198e5de9aa094d4ac01d068d0285.tar.gz rust-cab687853a63198e5de9aa094d4ac01d068d0285.zip | |
Make BufferedReader propagate 0-byte long reads.
Could prevent callers from catching the situation and lead to e.g early iterator terminations (cf. `Reader::read_byte') since `None' is only to be returned only on EOF.
| -rw-r--r-- | src/libstd/io/buffered.rs | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/libstd/io/buffered.rs b/src/libstd/io/buffered.rs index 95c313dd282..6350fabb018 100644 --- a/src/libstd/io/buffered.rs +++ b/src/libstd/io/buffered.rs @@ -118,14 +118,14 @@ impl<R: Reader> Reader for BufferedReader<R> { fn read(&mut self, buf: &mut [u8]) -> Option<uint> { let nread = { let available = self.fill(); - if available.len() == 0 { - return None; - } let nread = num::min(available.len(), buf.len()); vec::bytes::copy_memory(buf, available.slice_to(nread)); nread }; self.pos += nread; + if nread == 0 && self.inner.eof() && buf.len() != 0 { + return None; + } Some(nread) } |
