diff --git a/grep-matcher/src/lib.rs b/grep-matcher/src/lib.rs index 49d6358f..9a067efa 100644 --- a/grep-matcher/src/lib.rs +++ b/grep-matcher/src/lib.rs @@ -266,6 +266,16 @@ impl LineTerminator { LineTerminatorImp::CRLF => &[b'\r', b'\n'], } } + + /// Returns true if and only if the given slice ends with this line + /// terminator. + /// + /// If this line terminator is `CRLF`, then this only checks whether the + /// last byte is `\n`. + #[inline] + pub fn is_suffix(&self, slice: &[u8]) -> bool { + slice.last().map_or(false, |&b| b == self.as_byte()) + } } impl Default for LineTerminator { diff --git a/grep-printer/src/standard.rs b/grep-printer/src/standard.rs index 183fa4b5..6c8976b8 100644 --- a/grep-printer/src/standard.rs +++ b/grep-printer/src/standard.rs @@ -1396,7 +1396,7 @@ impl<'a, M: Matcher, W: WriteColor> StandardImpl<'a, M, W> { } fn has_line_terminator(&self, buf: &[u8]) -> bool { - buf.last() == Some(&self.searcher.line_terminator().as_byte()) + self.searcher.line_terminator().is_suffix(buf) } fn is_context(&self) -> bool {