}
}
Stream::InputFile(ref mut file) => {
- let mut b = [0u8; 1];
-
- match file.read(&mut b)? {
- 1 => {
- file.stream.get_mut().file.seek(SeekFrom::Current(-1))?;
- Ok(b[0])
+ match file.peek_byte() {
+ Some(result) => {
+ Ok(result?)
}
_ => Err(std::io::Error::new(
ErrorKind::UnexpectedEof,
addr,
);
- return Ok(());
+ if !self.machine_st.fail {
+ return Ok(());
+ } else {
+ self.machine_st.fail = false;
+ }
}
let addr = match addr {
Ok(&self.buf[self.pos..])
}
+
+ pub fn peek_byte(&mut self) -> Option<io::Result<u8>> {
+ match self.refresh_buffer() {
+ Ok(_buf) => {}
+ Err(e) => return Some(Err(e)),
+ }
+
+ return if let Some(b) = self.buf.get(0).cloned() {
+ Some(Ok(b))
+ } else {
+ None
+ };
+ }
}
impl<R: Read> CharRead for CharReader<R> {