Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Aug 2011 16:21:06 +0000 (UTC)
From:      Gabor Kovesdan <gabor@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r224803 - user/gabor/tre-integration/usr.bin/grep
Message-ID:  <201108121621.p7CGL6Eg073045@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: gabor
Date: Fri Aug 12 16:21:05 2011
New Revision: 224803
URL: http://svn.freebsd.org/changeset/base/224803

Log:
  - REG_NOSUB is always applicable
  - Avoid calculating pattern length various times
  - Drop code for -w and rely on recently introduced REG_WORD

Modified:
  user/gabor/tre-integration/usr.bin/grep/grep.c
  user/gabor/tre-integration/usr.bin/grep/grep.h
  user/gabor/tre-integration/usr.bin/grep/util.c

Modified: user/gabor/tre-integration/usr.bin/grep/grep.c
==============================================================================
--- user/gabor/tre-integration/usr.bin/grep/grep.c	Fri Aug 12 16:17:15 2011	(r224802)
+++ user/gabor/tre-integration/usr.bin/grep/grep.c	Fri Aug 12 16:21:05 2011	(r224803)
@@ -81,7 +81,7 @@ bool		 matchall;
 
 /* Searching patterns */
 unsigned int	 patterns, pattern_sz;
-char		**pattern;
+struct pat	*pattern;
 regex_t		*r_pattern;
 
 /* Filename exclusion/inclusion patterns */
@@ -109,7 +109,6 @@ bool	 oflag;		/* -o: print only matching
 bool	 qflag;		/* -q: quiet mode (don't output anything) */
 bool	 sflag;		/* -s: silent mode (ignore errors) */
 bool	 vflag;		/* -v: only show non-matching lines */
-bool	 wflag;		/* -w: pattern must start and end on word boundaries */
 bool	 xflag;		/* -x: pattern must match entire line */
 bool	 lbflag;	/* --line-buffered */
 bool	 nullflag;	/* --null */
@@ -231,14 +230,15 @@ add_pattern(char *pat, size_t len)
 	if (patterns == pattern_sz) {
 		pattern_sz *= 2;
 		pattern = grep_realloc(pattern, ++pattern_sz *
-		    sizeof(*pattern));
+		    sizeof(struct pat));
 	}
 	if (len > 0 && pat[len - 1] == '\n')
 		--len;
 	/* pat may not be NUL-terminated */
-	pattern[patterns] = grep_malloc(len + 1);
-	memcpy(pattern[patterns], pat, len);
-	pattern[patterns][len] = '\0';
+	pattern[patterns].pat = grep_malloc(len + 1);
+	memcpy(pattern[patterns].pat, pat, len);
+	pattern[patterns].pat[len] = '\0';
+	pattern[patterns].len = len;
 	++patterns;
 }
 
@@ -518,7 +518,6 @@ main(int argc, char *argv[])
 			break;
 		case 'o':
 			oflag = true;
-			cflags &= ~REG_NOSUB;
 			break;
 		case 'p':
 			linkbehave = LINK_SKIP;
@@ -551,12 +550,10 @@ main(int argc, char *argv[])
 			vflag = true;
 			break;
 		case 'w':
-			wflag = true;
-			cflags &= ~REG_NOSUB;
+			cflags |= REG_WORD;
 			break;
 		case 'x':
 			xflag = true;
-			cflags &= ~REG_NOSUB;
 			break;
 		case 'Z':
 			filebehave = FILE_GZIP;
@@ -590,7 +587,6 @@ main(int argc, char *argv[])
 			    strcasecmp("none", optarg) != 0 &&
 			    strcasecmp("no", optarg) != 0)
 				errx(2, getstr(3), "--color");
-			cflags &= ~REG_NOSUB;
 			break;
 		case LABEL_OPT:
 			label = optarg;
@@ -656,7 +652,8 @@ main(int argc, char *argv[])
 	r_pattern = grep_calloc(patterns, sizeof(*r_pattern));
 
 	for (i = 0; i < patterns; ++i) {
-		c = regcomp(&r_pattern[i], pattern[i], cflags);
+		c = regncomp(&r_pattern[i], pattern[i].pat,
+		    pattern[i].len, cflags);
 		if (c != 0) {
 			regerror(c, &r_pattern[i], re_error,
 			    RE_ERROR_BUF);

Modified: user/gabor/tre-integration/usr.bin/grep/grep.h
==============================================================================
--- user/gabor/tre-integration/usr.bin/grep/grep.h	Fri Aug 12 16:17:15 2011	(r224802)
+++ user/gabor/tre-integration/usr.bin/grep/grep.h	Fri Aug 12 16:21:05 2011	(r224803)
@@ -90,6 +90,11 @@ struct str {
 	int		 line_no;
 };
 
+struct pat {
+	char		*pat;
+	int		 len;
+};
+
 struct epat {
 	char		*pat;
 	int		 mode;
@@ -101,7 +106,7 @@ extern int	 cflags, eflags;
 /* Command line flags */
 extern bool	 Eflag, Fflag, Gflag, Hflag, Lflag,
 		 bflag, cflag, hflag, iflag, lflag, mflag, nflag, oflag,
-		 qflag, sflag, vflag, wflag, xflag;
+		 qflag, sflag, vflag, xflag;
 extern bool	 dexclude, dinclude, fexclude, finclude, lbflag, nullflag;
 extern unsigned long long Aflag, Bflag, mcount;
 extern char	*label;
@@ -111,7 +116,7 @@ extern int	 binbehave, devbehave, dirbeh
 extern bool	 first, matchall, notfound, prev;
 extern int	 tail;
 extern unsigned int dpatterns, fpatterns, patterns;
-extern char    **pattern;
+extern struct pat  *pattern;
 extern struct epat *dpattern, *fpattern;
 extern regex_t	*er_pattern, *r_pattern;
 

Modified: user/gabor/tre-integration/usr.bin/grep/util.c
==============================================================================
--- user/gabor/tre-integration/usr.bin/grep/util.c	Fri Aug 12 16:17:15 2011	(r224802)
+++ user/gabor/tre-integration/usr.bin/grep/util.c	Fri Aug 12 16:21:05 2011	(r224803)
@@ -311,25 +311,6 @@ procline(struct str *l, int nottext)
 					if (pmatch.rm_so != 0 ||
 					    (size_t)pmatch.rm_eo != l->len)
 						r = REG_NOMATCH;
-				/* Check for whole word match */
-				if (r == 0 && wflag &&
-				    pmatch.rm_so != 0) {
-					wint_t wbegin, wend;
-
-					wbegin = wend = L' ';
-					if (pmatch.rm_so != 0 &&
-					    sscanf(&l->dat[pmatch.rm_so - 1],
-					    "%lc", &wbegin) != 1)
-						r = REG_NOMATCH;
-					else if ((size_t)pmatch.rm_eo !=
-					    l->len &&
-					    sscanf(&l->dat[pmatch.rm_eo],
-					    "%lc", &wend) != 1)
-						r = REG_NOMATCH;
-					else if (iswword(wbegin) ||
-					    iswword(wend))
-						r = REG_NOMATCH;
-				}
 				if (r == 0) {
 					if (m == 0)
 						c++;



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