diff --git a/src/libstd/io/buffered.rs b/src/libstd/io/buffered.rs index 8862226adbbd3..33102a687052b 100644 --- a/src/libstd/io/buffered.rs +++ b/src/libstd/io/buffered.rs @@ -56,6 +56,7 @@ pub struct BufReader { buf: Box<[u8]>, pos: usize, cap: usize, + inner_pos: u64, } impl BufReader { @@ -359,6 +360,10 @@ impl Seek for BufReader { fn seek(&mut self, pos: SeekFrom) -> io::Result { let result: u64; if let SeekFrom::Current(n) = pos { + if n == 0 { + return Ok(self.inner_pos); + } + let remainder = (self.cap - self.pos) as i64; // it should be safe to assume that remainder fits within an i64 as the alternative // means we managed to allocate 8 exbibytes and that's absurd. @@ -378,6 +383,7 @@ impl Seek for BufReader { result = self.inner.seek(pos)?; } self.discard_buffer(); + self.inner_pos = result; Ok(result) } }