correct peek_byte/2 bugs (#1882)
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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> {
|
||||||
|
|||||||
Reference in New Issue
Block a user