diff options
author | Sharif Haason <ssh128@scarletmail.rutgers.edu> | 2023-06-20 10:45:13 -0400 |
---|---|---|
committer | Sharif Haason <ssh128@scarletmail.rutgers.edu> | 2023-06-20 10:45:13 -0400 |
commit | a3268b8791ac4bf54f734b1abdcfeddf5841a96a (patch) | |
tree | 96304f953c93182643172c1d1192c5ed481d70b1 /src | |
parent | 2a534483c8b186622d85cd79bde0edf3d98b862c (diff) |
Correctly handle discontinuous input i.e. stdin
Diffstat (limited to 'src')
-rw-r--r-- | src/lib.rs | 26 |
1 files changed, 21 insertions, 5 deletions
@@ -583,11 +583,27 @@ 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 + break 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 { + self.print_position_panel()?; + self.print_bytes()?; + if self.show_char_panel { + self.print_char_panel()?; + } + self.writer.write_all(b"\n")?; + leftover = 0; + } + } }; } else if n == 0 { // if no bytes are read, that indicates end of file |