correct peek_byte/2 bugs (#1882)

This commit is contained in:
Mark
2023-07-13 12:23:20 -06:00
parent cfc49243c8
commit b051f39145
3 changed files with 21 additions and 7 deletions

View File

@@ -1268,12 +1268,9 @@ impl Stream {
} }
} }
Stream::InputFile(ref mut file) => { Stream::InputFile(ref mut file) => {
let mut b = [0u8; 1]; match file.peek_byte() {
Some(result) => {
match file.read(&mut b)? { Ok(result?)
1 => {
file.stream.get_mut().file.seek(SeekFrom::Current(-1))?;
Ok(b[0])
} }
_ => Err(std::io::Error::new( _ => Err(std::io::Error::new(
ErrorKind::UnexpectedEof, ErrorKind::UnexpectedEof,

View File

@@ -2444,7 +2444,11 @@ impl Machine {
addr, addr,
); );
return Ok(()); if !self.machine_st.fail {
return Ok(());
} else {
self.machine_st.fail = false;
}
} }
let addr = match addr { let addr = match addr {

View File

@@ -128,6 +128,19 @@ impl<R: Read> CharReader<R> {
Ok(&self.buf[self.pos..]) 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> { impl<R: Read> CharRead for CharReader<R> {