Skip to content

Remove eof() from io::Reader #11376

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 9, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/libextra/time.rs
Original file line number Diff line number Diff line change
Expand Up @@ -788,7 +788,7 @@ pub fn strptime(s: &str, format: &str) -> Result<Tm, ~str> {
}
}

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,
Expand Down
1 change: 0 additions & 1 deletion src/libnative/io/file.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,6 @@ impl io::Reader for FileDesc {
fn read(&mut self, buf: &mut [u8]) -> Option<uint> {
match self.inner_read(buf) { Ok(n) => Some(n), Err(..) => None }
}
fn eof(&mut self) -> bool { false }
}

impl io::Writer for FileDesc {
Expand Down
33 changes: 8 additions & 25 deletions src/libstd/io/buffered.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ pub struct BufferedReader<R> {
priv inner: R,
priv buf: ~[u8],
priv pos: uint,
priv cap: uint
priv cap: uint,
priv eof: bool,
}

impl<R: Reader> BufferedReader<R> {
Expand All @@ -84,7 +85,8 @@ impl<R: Reader> BufferedReader<R> {
inner: inner,
buf: buf,
pos: 0,
cap: 0
cap: 0,
eof: false,
}
}

Expand Down Expand Up @@ -113,7 +115,7 @@ impl<R: Reader> Buffer for BufferedReader<R> {
self.pos = 0;
self.cap = cap;
}
None => {}
None => { self.eof = true; }
}
}
return self.buf.slice(self.pos, self.cap);
Expand All @@ -134,15 +136,11 @@ impl<R: Reader> Reader for BufferedReader<R> {
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
Expand Down Expand Up @@ -270,7 +268,6 @@ impl<W> InternalBufferedWriter<W> {

impl<W: Reader> Reader for InternalBufferedWriter<W> {
fn read(&mut self, buf: &mut [u8]) -> Option<uint> { 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
Expand Down Expand Up @@ -325,7 +322,6 @@ impl<S: Stream> Buffer for BufferedStream<S> {

impl<S: Stream> Reader for BufferedStream<S> {
fn read(&mut self, buf: &mut [u8]) -> Option<uint> { self.inner.read(buf) }
fn eof(&mut self) -> bool { self.inner.eof() }
}

impl<S: Stream> Writer for BufferedStream<S> {
Expand All @@ -351,10 +347,6 @@ mod test {
fn read(&mut self, _: &mut [u8]) -> Option<uint> {
None
}

fn eof(&mut self) -> bool {
true
}
}

impl Writer for NullStream {
Expand All @@ -370,10 +362,6 @@ mod test {
fn read(&mut self, _: &mut [u8]) -> Option<uint> {
self.lengths.shift_opt()
}

fn eof(&mut self) -> bool {
self.lengths.len() == 0
}
}

#[test]
Expand All @@ -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));
}
Expand Down Expand Up @@ -466,13 +450,11 @@ mod test {

impl io::Reader for S {
fn read(&mut self, _: &mut [u8]) -> Option<uint> { 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();
}
Expand Down Expand Up @@ -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);
}

Expand Down
9 changes: 0 additions & 9 deletions src/libstd/io/comm_adapters.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,6 @@ impl Reader for PortReader {
Some(num_read)
}
}

fn eof(&mut self) -> bool { self.closed }
}

/// Allows writing to a chan.
Expand Down Expand Up @@ -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, _, _)| {
Expand All @@ -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.
Expand All @@ -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);
}

Expand Down
18 changes: 0 additions & 18 deletions src/libstd/io/extensions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -150,9 +150,6 @@ mod test {
Some(1)
}
}
fn eof(&mut self) -> bool {
false
}
}

struct EofReader;
Expand All @@ -161,9 +158,6 @@ mod test {
fn read(&mut self, _: &mut [u8]) -> Option<uint> {
None
}
fn eof(&mut self) -> bool {
false
}
}

struct ErroringReader;
Expand All @@ -173,9 +167,6 @@ mod test {
io_error::cond.raise(placeholder_error());
None
}
fn eof(&mut self) -> bool {
false
}
}

struct PartialReader {
Expand All @@ -195,9 +186,6 @@ mod test {
Some(2)
}
}
fn eof(&mut self) -> bool {
false
}
}

struct ErroringLaterReader {
Expand All @@ -215,9 +203,6 @@ mod test {
None
}
}
fn eof(&mut self) -> bool {
false
}
}

struct ThreeChunkReader {
Expand All @@ -240,9 +225,6 @@ mod test {
None
}
}
fn eof(&mut self) -> bool {
false
}
}

#[test]
Expand Down
2 changes: 0 additions & 2 deletions src/libstd/io/flate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,4 @@ impl<R: Reader> InflateReader<R> {

impl<R: Reader> Reader for InflateReader<R> {
fn read(&mut self, _buf: &mut [u8]) -> Option<uint> { fail!() }

fn eof(&mut self) -> bool { fail!() }
}
10 changes: 8 additions & 2 deletions src/libstd/io/fs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -597,8 +605,6 @@ impl Reader for File {
}
}
}

fn eof(&mut self) -> bool { self.last_nread == 0 }
}

impl Writer for File {
Expand Down
12 changes: 2 additions & 10 deletions src/libstd/io/mem.rs
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ impl MemReader {

impl Reader for MemReader {
fn read(&mut self, buf: &mut [u8]) -> Option<uint> {
{ if self.eof() { return None; } }
if self.pos == self.buf.len() { return None }

let write_len = min(buf.len(), self.buf.len() - self.pos);
{
Expand All @@ -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 {
Expand Down Expand Up @@ -222,7 +220,7 @@ impl<'a> BufReader<'a> {

impl<'a> Reader for BufReader<'a> {
fn read(&mut self, buf: &mut [u8]) -> Option<uint> {
{ if self.eof() { return None; } }
if self.pos == self.buf.len() { return None }

let write_len = min(buf.len(), self.buf.len() - self.pos);
{
Expand All @@ -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> {
Expand Down Expand Up @@ -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]
Expand All @@ -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]
Expand Down
22 changes: 0 additions & 22 deletions src/libstd/io/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<uint>;

/// 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.
Expand Down Expand Up @@ -864,12 +844,10 @@ pub trait Reader {

impl Reader for ~Reader {
fn read(&mut self, buf: &mut [u8]) -> Option<uint> { 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<uint> { self.read(buf) }
fn eof(&mut self) -> bool { self.eof() }
}

fn extend_sign(val: u64, nbytes: uint) -> i64 {
Expand Down
2 changes: 0 additions & 2 deletions src/libstd/io/net/tcp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,6 @@ impl Reader for TcpStream {
}
}
}

fn eof(&mut self) -> bool { fail!() }
}

impl Writer for TcpStream {
Expand Down
Loading