summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSharif Haason <ssh128@scarletmail.rutgers.edu>2023-06-20 10:45:13 -0400
committerSharif Haason <ssh128@scarletmail.rutgers.edu>2023-06-20 10:45:13 -0400
commita3268b8791ac4bf54f734b1abdcfeddf5841a96a (patch)
tree96304f953c93182643172c1d1192c5ed481d70b1 /src
parent2a534483c8b186622d85cd79bde0edf3d98b862c (diff)
Correctly handle discontinuous input i.e. stdin
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/lib.rs b/src/lib.rs
index cc2a04e..ee90929 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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