diff --git a/src/libextra/time.rs b/src/libextra/time.rs index c2948024e28..d19181ab9f1 100644 --- a/src/libextra/time.rs +++ b/src/libextra/time.rs @@ -788,7 +788,7 @@ pub fn strptime(s: &str, format: &str) -> Result { } } - if pos == len && rdr.eof() { + if pos == len && rdr.tell() as uint == format.len() { Ok(Tm { tm_sec: tm.tm_sec, tm_min: tm.tm_min, diff --git a/src/libnative/io/file.rs b/src/libnative/io/file.rs index dac1ca98cf9..49290434785 100644 --- a/src/libnative/io/file.rs +++ b/src/libnative/io/file.rs @@ -114,7 +114,6 @@ impl io::Reader for FileDesc { fn read(&mut self, buf: &mut [u8]) -> Option { match self.inner_read(buf) { Ok(n) => Some(n), Err(..) => None } } - fn eof(&mut self) -> bool { false } } impl io::Writer for FileDesc { diff --git a/src/libstd/io/buffered.rs b/src/libstd/io/buffered.rs index 96cb59ce778..d0894bef413 100644 --- a/src/libstd/io/buffered.rs +++ b/src/libstd/io/buffered.rs @@ -66,7 +66,8 @@ pub struct BufferedReader { priv inner: R, priv buf: ~[u8], priv pos: uint, - priv cap: uint + priv cap: uint, + priv eof: bool, } impl BufferedReader { @@ -84,7 +85,8 @@ impl BufferedReader { inner: inner, buf: buf, pos: 0, - cap: 0 + cap: 0, + eof: false, } } @@ -113,7 +115,7 @@ impl Buffer for BufferedReader { self.pos = 0; self.cap = cap; } - None => {} + None => { self.eof = true; } } } return self.buf.slice(self.pos, self.cap); @@ -134,15 +136,11 @@ impl Reader for BufferedReader { nread }; self.pos += nread; - if nread == 0 && self.inner.eof() && buf.len() != 0 { - return None; + if nread == 0 && buf.len() != 0 && self.eof { + return None; } Some(nread) } - - fn eof(&mut self) -> bool { - self.pos == self.cap && self.inner.eof() - } } /// Wraps a Writer and buffers output to it @@ -270,7 +268,6 @@ impl InternalBufferedWriter { impl Reader for InternalBufferedWriter { fn read(&mut self, buf: &mut [u8]) -> Option { self.get_mut_ref().inner.read(buf) } - fn eof(&mut self) -> bool { self.get_mut_ref().inner.eof() } } /// Wraps a Stream and buffers input and output to and from it @@ -325,7 +322,6 @@ impl Buffer for BufferedStream { impl Reader for BufferedStream { fn read(&mut self, buf: &mut [u8]) -> Option { self.inner.read(buf) } - fn eof(&mut self) -> bool { self.inner.eof() } } impl Writer for BufferedStream { @@ -351,10 +347,6 @@ mod test { fn read(&mut self, _: &mut [u8]) -> Option { None } - - fn eof(&mut self) -> bool { - true - } } impl Writer for NullStream { @@ -370,10 +362,6 @@ mod test { fn read(&mut self, _: &mut [u8]) -> Option { self.lengths.shift_opt() } - - fn eof(&mut self) -> bool { - self.lengths.len() == 0 - } } #[test] @@ -385,24 +373,20 @@ mod test { let nread = reader.read(buf); assert_eq!(Some(2), nread); assert_eq!([0, 1, 0], buf); - assert!(!reader.eof()); let mut buf = [0]; let nread = reader.read(buf); assert_eq!(Some(1), nread); assert_eq!([2], buf); - assert!(!reader.eof()); let mut buf = [0, 0, 0]; let nread = reader.read(buf); assert_eq!(Some(1), nread); assert_eq!([3, 0, 0], buf); - assert!(!reader.eof()); let nread = reader.read(buf); assert_eq!(Some(1), nread); assert_eq!([4, 0, 0], buf); - assert!(reader.eof()); assert_eq!(None, reader.read(buf)); } @@ -466,13 +450,11 @@ mod test { impl io::Reader for S { fn read(&mut self, _: &mut [u8]) -> Option { None } - fn eof(&mut self) -> bool { true } } let mut stream = BufferedStream::new(S); let mut buf = []; stream.read(buf); - stream.eof(); stream.write(buf); stream.flush(); } @@ -539,6 +521,7 @@ mod test { assert_eq!(reader.read(buf), Some(2)); assert_eq!(reader.read(buf), Some(0)); assert_eq!(reader.read(buf), Some(1)); + assert_eq!(reader.read(buf), Some(0)); assert_eq!(reader.read(buf), None); } diff --git a/src/libstd/io/comm_adapters.rs b/src/libstd/io/comm_adapters.rs index 7a79857e754..e15b9a861ca 100644 --- a/src/libstd/io/comm_adapters.rs +++ b/src/libstd/io/comm_adapters.rs @@ -77,8 +77,6 @@ impl Reader for PortReader { Some(num_read) } } - - fn eof(&mut self) -> bool { self.closed } } /// Allows writing to a chan. @@ -133,22 +131,17 @@ mod test { let mut reader = PortReader::new(port); let mut buf = ~[0u8, ..3]; - assert_eq!(false, reader.eof()); assert_eq!(Some(0), reader.read([])); - assert_eq!(false, reader.eof()); assert_eq!(Some(3), reader.read(buf)); - assert_eq!(false, reader.eof()); assert_eq!(~[1,2,3], buf); assert_eq!(Some(3), reader.read(buf)); - assert_eq!(false, reader.eof()); assert_eq!(~[4,5,6], buf); assert_eq!(Some(2), reader.read(buf)); assert_eq!(~[7,8,6], buf); - assert_eq!(true, reader.eof()); let mut err = None; let result = io::io_error::cond.trap(|io::standard_error(k, _, _)| { @@ -158,7 +151,6 @@ mod test { }); assert_eq!(Some(io::EndOfFile), err); assert_eq!(None, result); - assert_eq!(true, reader.eof()); assert_eq!(~[7,8,6], buf); // Ensure it continues to fail in the same way. @@ -170,7 +162,6 @@ mod test { }); assert_eq!(Some(io::EndOfFile), err); assert_eq!(None, result); - assert_eq!(true, reader.eof()); assert_eq!(~[7,8,6], buf); } diff --git a/src/libstd/io/extensions.rs b/src/libstd/io/extensions.rs index 3ad05348960..09876f15a8b 100644 --- a/src/libstd/io/extensions.rs +++ b/src/libstd/io/extensions.rs @@ -150,9 +150,6 @@ mod test { Some(1) } } - fn eof(&mut self) -> bool { - false - } } struct EofReader; @@ -161,9 +158,6 @@ mod test { fn read(&mut self, _: &mut [u8]) -> Option { None } - fn eof(&mut self) -> bool { - false - } } struct ErroringReader; @@ -173,9 +167,6 @@ mod test { io_error::cond.raise(placeholder_error()); None } - fn eof(&mut self) -> bool { - false - } } struct PartialReader { @@ -195,9 +186,6 @@ mod test { Some(2) } } - fn eof(&mut self) -> bool { - false - } } struct ErroringLaterReader { @@ -215,9 +203,6 @@ mod test { None } } - fn eof(&mut self) -> bool { - false - } } struct ThreeChunkReader { @@ -240,9 +225,6 @@ mod test { None } } - fn eof(&mut self) -> bool { - false - } } #[test] diff --git a/src/libstd/io/flate.rs b/src/libstd/io/flate.rs index c56bdf5bec8..0cf00b2c1a9 100644 --- a/src/libstd/io/flate.rs +++ b/src/libstd/io/flate.rs @@ -49,6 +49,4 @@ impl InflateReader { impl Reader for InflateReader { fn read(&mut self, _buf: &mut [u8]) -> Option { fail!() } - - fn eof(&mut self) -> bool { fail!() } } diff --git a/src/libstd/io/fs.rs b/src/libstd/io/fs.rs index cf203f2782c..a3f84fe2afa 100644 --- a/src/libstd/io/fs.rs +++ b/src/libstd/io/fs.rs @@ -205,6 +205,14 @@ impl File { pub fn truncate(&mut self, size: i64) { self.fd.truncate(size).map_err(|e| io_error::cond.raise(e)); } + + /// Tests whether this stream has reached EOF. + /// + /// If true, then this file will no longer continue to return data via + /// `read`. + pub fn eof(&self) -> bool { + self.last_nread == 0 + } } /// Unlink a file from the underlying filesystem. @@ -597,8 +605,6 @@ impl Reader for File { } } } - - fn eof(&mut self) -> bool { self.last_nread == 0 } } impl Writer for File { diff --git a/src/libstd/io/mem.rs b/src/libstd/io/mem.rs index 95cf7ab4078..53aa176134d 100644 --- a/src/libstd/io/mem.rs +++ b/src/libstd/io/mem.rs @@ -124,7 +124,7 @@ impl MemReader { impl Reader for MemReader { fn read(&mut self, buf: &mut [u8]) -> Option { - { if self.eof() { return None; } } + if self.pos == self.buf.len() { return None } let write_len = min(buf.len(), self.buf.len() - self.pos); { @@ -138,8 +138,6 @@ impl Reader for MemReader { return Some(write_len); } - - fn eof(&mut self) -> bool { self.pos == self.buf.len() } } impl Seek for MemReader { @@ -222,7 +220,7 @@ impl<'a> BufReader<'a> { impl<'a> Reader for BufReader<'a> { fn read(&mut self, buf: &mut [u8]) -> Option { - { if self.eof() { return None; } } + if self.pos == self.buf.len() { return None } let write_len = min(buf.len(), self.buf.len() - self.pos); { @@ -236,8 +234,6 @@ impl<'a> Reader for BufReader<'a> { return Some(write_len); } - - fn eof(&mut self) -> bool { self.pos == self.buf.len() } } impl<'a> Seek for BufReader<'a> { @@ -369,9 +365,7 @@ mod test { assert_eq!(buf, [1, 2, 3, 4]); assert_eq!(reader.read(buf), Some(3)); assert_eq!(buf.slice(0, 3), [5, 6, 7]); - assert!(reader.eof()); assert_eq!(reader.read(buf), None); - assert!(reader.eof()); } #[test] @@ -391,9 +385,7 @@ mod test { assert_eq!(buf, [1, 2, 3, 4]); assert_eq!(reader.read(buf), Some(3)); assert_eq!(buf.slice(0, 3), [5, 6, 7]); - assert!(reader.eof()); assert_eq!(reader.read(buf), None); - assert!(reader.eof()); } #[test] diff --git a/src/libstd/io/mod.rs b/src/libstd/io/mod.rs index a40999a8042..3ab710e9356 100644 --- a/src/libstd/io/mod.rs +++ b/src/libstd/io/mod.rs @@ -502,26 +502,6 @@ pub trait Reader { /// Is it actually possible for 0 bytes to be read successfully? fn read(&mut self, buf: &mut [u8]) -> Option; - /// Return whether the Reader has reached the end of the stream. - /// - /// # Example - /// - /// ```rust - /// use std::io; - /// # let _g = ::std::io::ignore_io_error(); - /// let mut reader = io::stdin(); - /// - /// let mut bytes = [0, .. 10]; - /// reader.read(bytes); - /// - /// if reader.eof() { println("stdin() had at most 10 bytes of data."); } - /// ``` - /// - /// # Failure - /// - /// Returns `true` on failure. - fn eof(&mut self) -> bool; - // Convenient helper methods based on the above methods /// Reads a single byte. Returns `None` on EOF. @@ -864,12 +844,10 @@ pub trait Reader { impl Reader for ~Reader { fn read(&mut self, buf: &mut [u8]) -> Option { self.read(buf) } - fn eof(&mut self) -> bool { self.eof() } } impl<'a> Reader for &'a mut Reader { fn read(&mut self, buf: &mut [u8]) -> Option { self.read(buf) } - fn eof(&mut self) -> bool { self.eof() } } fn extend_sign(val: u64, nbytes: uint) -> i64 { diff --git a/src/libstd/io/net/tcp.rs b/src/libstd/io/net/tcp.rs index c2a70e0120d..023a9bddca9 100644 --- a/src/libstd/io/net/tcp.rs +++ b/src/libstd/io/net/tcp.rs @@ -67,8 +67,6 @@ impl Reader for TcpStream { } } } - - fn eof(&mut self) -> bool { fail!() } } impl Writer for TcpStream { diff --git a/src/libstd/io/net/udp.rs b/src/libstd/io/net/udp.rs index eaee48dc6e0..8a866c2a357 100644 --- a/src/libstd/io/net/udp.rs +++ b/src/libstd/io/net/udp.rs @@ -86,8 +86,6 @@ impl Reader for UdpStream { } }) } - - fn eof(&mut self) -> bool { fail!() } } impl Writer for UdpStream { diff --git a/src/libstd/io/net/unix.rs b/src/libstd/io/net/unix.rs index 01b409d4316..232ca670597 100644 --- a/src/libstd/io/net/unix.rs +++ b/src/libstd/io/net/unix.rs @@ -67,7 +67,6 @@ impl UnixStream { impl Reader for UnixStream { fn read(&mut self, buf: &mut [u8]) -> Option { self.obj.read(buf) } - fn eof(&mut self) -> bool { self.obj.eof() } } impl Writer for UnixStream { diff --git a/src/libstd/io/option.rs b/src/libstd/io/option.rs index 65fa71dd415..e2eec652d9d 100644 --- a/src/libstd/io/option.rs +++ b/src/libstd/io/option.rs @@ -48,16 +48,6 @@ impl Reader for Option { } } } - - fn eof(&mut self) -> bool { - match *self { - Some(ref mut reader) => reader.eof(), - None => { - io_error::cond.raise(prev_io_error()); - true - } - } - } } impl Seek for Option { @@ -145,7 +135,6 @@ mod test { let mut buf = [0, 0]; reader.read(buf); assert_eq!(buf, [0, 1]); - assert!(!reader.eof()); } #[test] @@ -161,14 +150,5 @@ mod test { reader.read(buf); }); assert!(called); - - let mut called = false; - io_error::cond.trap(|err| { - assert_eq!(err.kind, PreviousIoError); - called = true; - }).inside(|| { - assert!(reader.eof()); - }); - assert!(called); } } diff --git a/src/libstd/io/pipe.rs b/src/libstd/io/pipe.rs index e3f2cc2384c..799adff37e3 100644 --- a/src/libstd/io/pipe.rs +++ b/src/libstd/io/pipe.rs @@ -66,8 +66,6 @@ impl Reader for PipeStream { } } } - - fn eof(&mut self) -> bool { false } } impl Writer for PipeStream { diff --git a/src/libstd/io/stdio.rs b/src/libstd/io/stdio.rs index 6e6cdfb25de..f3177276bc2 100644 --- a/src/libstd/io/stdio.rs +++ b/src/libstd/io/stdio.rs @@ -272,8 +272,6 @@ impl Reader for StdReader { } } } - - fn eof(&mut self) -> bool { false } } /// Representation of a writer to a standard output stream diff --git a/src/libstd/io/util.rs b/src/libstd/io/util.rs index 0f64e9f874b..612c757ad4c 100644 --- a/src/libstd/io/util.rs +++ b/src/libstd/io/util.rs @@ -36,10 +36,6 @@ impl<'a, R: Reader> Reader for LimitReader<'a, R> { len }) } - - fn eof(&mut self) -> bool { - self.limit == 0 || self.inner.eof() - } } /// A `Writer` which ignores bytes written to it, like /dev/null. @@ -59,11 +55,6 @@ impl Reader for ZeroReader { buf.set_memory(0); Some(buf.len()) } - - #[inline] - fn eof(&mut self) -> bool { - false - } } /// A `Reader` which is always at EOF, like /dev/null. @@ -74,11 +65,6 @@ impl Reader for NullReader { fn read(&mut self, _buf: &mut [u8]) -> Option { None } - - #[inline] - fn eof(&mut self) -> bool { - true - } } /// A `Writer` which multiplexes writes to a set of `Writers`. @@ -140,10 +126,6 @@ impl> Reader for ChainedReader { } None } - - fn eof(&mut self) -> bool { - self.cur_reader.is_none() - } } /// A `Reader` which forwards input from another `Reader`, passing it along to @@ -174,10 +156,6 @@ impl Reader for TeeReader { len }) } - - fn eof(&mut self) -> bool { - self.reader.eof() - } } /// Copies all data from a `Reader` to a `Writer`. @@ -204,7 +182,6 @@ mod test { let mut r = LimitReader::new(&mut r, 4); assert_eq!(~[0, 1, 2], r.read_to_end()); } - assert!(r.eof()); } #[test] @@ -238,7 +215,6 @@ mod test { let mut r = NullReader; let mut buf = ~[0]; assert_eq!(r.read(buf), None); - assert!(r.eof()); } #[test] @@ -289,7 +265,6 @@ mod test { let mut r = MemReader::new(~[0, 1, 2, 3, 4]); let mut w = MemWriter::new(); copy(&mut r, &mut w); - assert!(r.eof()); assert_eq!(~[0, 1, 2, 3, 4], w.unwrap()); } }