about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSébastien Paolacci <sebastien.paolacci@gmail.com>2013-12-16 19:11:17 +0100
committerSébastien Paolacci <sebastien.paolacci@gmail.com>2013-12-16 19:11:17 +0100
commitcab687853a63198e5de9aa094d4ac01d068d0285 (patch)
tree583a009887a1bcbdd2dd444a6dd378ddab52ccf7
parent8d52dfbace05c46754f4f6bb5a25f55906c9d7b0 (diff)
downloadrust-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.rs6
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)
     }