Author: kevans
Date: Thu Aug 17 17:09:28 2017
New Revision: 322622
URL: https://svnweb.freebsd.org/changeset/base/322622

Log:
  MFC r318914: bsdgrep: correct assumptions to prepare for chunking
  
  Correct a couple of minor BSD grep assumptions that are valid for line
  processing but not future chunk-based processing.
  
  Approved by:  emaste (mentor, blanket MFC)

Modified:
  stable/11/usr.bin/grep/grep.c
  stable/11/usr.bin/grep/grep.h
  stable/11/usr.bin/grep/util.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/usr.bin/grep/grep.c
==============================================================================
--- stable/11/usr.bin/grep/grep.c       Thu Aug 17 16:54:37 2017        
(r322621)
+++ stable/11/usr.bin/grep/grep.c       Thu Aug 17 17:09:28 2017        
(r322622)
@@ -79,7 +79,7 @@ const char    *errstr[] = {
 };
 
 /* Flags passed to regcomp() and regexec() */
-int             cflags = REG_NOSUB;
+int             cflags = REG_NOSUB | REG_NEWLINE;
 int             eflags = REG_STARTEND;
 
 /* XXX TODO: Get rid of this flag.

Modified: stable/11/usr.bin/grep/grep.h
==============================================================================
--- stable/11/usr.bin/grep/grep.h       Thu Aug 17 16:54:37 2017        
(r322621)
+++ stable/11/usr.bin/grep/grep.h       Thu Aug 17 17:09:28 2017        
(r322622)
@@ -82,7 +82,7 @@ extern const char             *errstr[];
 #define        EXCL_PAT        0
 #define        INCL_PAT        1
 
-#define        MAX_LINE_MATCHES        32
+#define        MAX_MATCHES     32
 
 struct file {
        int              fd;

Modified: stable/11/usr.bin/grep/util.c
==============================================================================
--- stable/11/usr.bin/grep/util.c       Thu Aug 17 16:54:37 2017        
(r322621)
+++ stable/11/usr.bin/grep/util.c       Thu Aug 17 17:09:28 2017        
(r322622)
@@ -61,7 +61,7 @@ static bool    first_match = true;
  * other useful bits
  */
 struct parsec {
-       regmatch_t      matches[MAX_LINE_MATCHES];      /* Matches made */
+       regmatch_t      matches[MAX_MATCHES];           /* Matches made */
        struct str      ln;                             /* Current line */
        size_t          lnstart;                        /* Position in line */
        size_t          matchidx;                       /* Latest match index */
@@ -295,7 +295,7 @@ procfile(const char *fn)
                /* Print the matching line, but only if not quiet/binary */
                if (t == 0 && printmatch) {
                        printline(&pc, ':');
-                       while (pc.matchidx >= MAX_LINE_MATCHES) {
+                       while (pc.matchidx >= MAX_MATCHES) {
                                /* Reset matchidx and try again */
                                pc.matchidx = 0;
                                if (procline(&pc) == 0)
@@ -401,7 +401,7 @@ procline(struct parsec *pc)
                lastmatches = 0;
                startm = matchidx;
                retry = 0;
-               if (st > 0)
+               if (st > 0 && pc->ln.dat[st - 1] != fileeol)
                        leflags |= REG_NOTBOL;
                /* Loop to compare with all the patterns */
                for (i = 0; i < patterns; i++) {
@@ -483,7 +483,7 @@ procline(struct parsec *pc)
                        }
                        /* avoid excessive matching - skip further patterns */
                        if ((color == NULL && !oflag) || qflag || lflag ||
-                           matchidx >= MAX_LINE_MATCHES) {
+                           matchidx >= MAX_MATCHES) {
                                pc->lnstart = nst;
                                lastmatches = 0;
                                break;
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to