Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 17 Aug 2017 17:09:28 +0000 (UTC)
From:      Kyle Evans <kevans@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r322622 - stable/11/usr.bin/grep
Message-ID:  <201708171709.v7HH9SeZ035580@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201708171709.v7HH9SeZ035580>