Skip to content

Commit

Permalink
Rollup merge of rust-lang#61157 - czipperz:BufReader-Seek-remove-extr…
Browse files Browse the repository at this point in the history
…a-discard_buffer, r=nikomatsakis

BufReader: In Seek impl, remove extra discard_buffer call

As far as I can tell, this code does nothing.  I'm not sure why it even is there.
  • Loading branch information
Centril committed May 28, 2019
2 parents c827391 + b1ae49c commit dc278c3
Showing 1 changed file with 35 additions and 0 deletions.
35 changes: 35 additions & 0 deletions src/libstd/io/buffered.rs
Expand Up @@ -1162,6 +1162,41 @@ mod tests {
assert_eq!(reader.get_ref().pos, expected);
}

#[test]
fn test_buffered_reader_seek_underflow_discard_buffer_between_seeks() {
// gimmick reader that returns Err after first seek
struct ErrAfterFirstSeekReader {
first_seek: bool,
}
impl Read for ErrAfterFirstSeekReader {
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
for x in &mut *buf {
*x = 0;
}
Ok(buf.len())
}
}
impl Seek for ErrAfterFirstSeekReader {
fn seek(&mut self, _: SeekFrom) -> io::Result<u64> {
if self.first_seek {
self.first_seek = false;
Ok(0)
} else {
Err(io::Error::new(io::ErrorKind::Other, "oh no!"))
}
}
}

let mut reader = BufReader::with_capacity(5, ErrAfterFirstSeekReader { first_seek: true });
assert_eq!(reader.fill_buf().ok(), Some(&[0, 0, 0, 0, 0][..]));

// The following seek will require two underlying seeks. The first will
// succeed but the second will fail. This should still invalidate the
// buffer.
assert!(reader.seek(SeekFrom::Current(i64::min_value())).is_err());
assert_eq!(reader.buffer().len(), 0);
}

#[test]
fn test_buffered_writer() {
let inner = Vec::new();
Expand Down

0 comments on commit dc278c3

Please sign in to comment.