Merge pull request #197 from sharifhsn/stdin-fix

Correctly handle discontinuous input i.e. stdin
This commit is contained in:
David Peter authored and GitHub committed 2023-07-23 13:07:31 +02:00
commit b6b7e2c79a
1 file changed
+17 -5
+17 -5
View File
@@ -583,11 +583,23 @@ impl<'a, Writer: Write> Printer<'a, Writer> {
self.print_header()?;
is_empty = false;
}
// perform second check on read
if let Ok(0) = buf.read(&mut self.line_buf[n..]) {
self.line_buf.resize(n, 0);
break Some(n);
let mut leftover = n;
// loop until input is ceased
if let Some(s) = loop {
if let Ok(n) = buf.read(&mut self.line_buf[leftover..]) {
leftover += n;
// there is no more input being read
if n == 0 {
self.line_buf.resize(leftover, 0);
break Some(leftover);
}
// amount read has exceeded line buffer
if leftover >= 8 * self.panels as usize {
break None;
}
}
} {
break Some(s);
};
} else if n == 0 {
// if no bytes are read, that indicates end of file