HomeFreeBSD

bsdgrep: fix matching behaviour

Description

bsdgrep: fix matching behaviour

  • Set REG_NOTBOL if we've already matched beginning of line and we're examining later parts
  • For each pattern we examine, apply it to the remaining bits of the line rather than (potentially) smaller subsets
  • Check for REG_NOSUB after we've looked at all patterns initially matching the line
  • Keep track of the last match we made to later determine if we're simply not matching any longer or if we need to proceed another byte because we hit a zero-length match
  • Match the earliest and longest bit of each line before moving the beginning of what we match to further in the line, past the end of the longest match; this generally matches how gnugrep(1) seems to behave, and seems like pretty good behavior to me
  • Finally, bail out of printing any matches if we were set to print all (empty pattern) but -o (output matches) was set

PR: 195763, 180990, 197555, 197531, 181263, 209116
Submitted by: "Kyle Evans" <kevans91@ksu.edu>
Reviewed by: cem
MFC after: 1 month
Relnotes: Yes
Differential Revision: https://reviews.freebsd.org/D10104

Details