svn commit: r222414 - user/gabor/tre-integration/usr.bin/grep

Gabor Kovesdan gabor at FreeBSD.org
Sat May 28 08:37:03 UTC 2011


Author: gabor
Date: Sat May 28 08:37:03 2011
New Revision: 222414
URL: http://svn.freebsd.org/changeset/base/222414

Log:
  - Use libc in grep instead of GNU regex
  - Eliminate literal matching code and depend on TRE's REG_LITERAL

Deleted:
  user/gabor/tre-integration/usr.bin/grep/fastgrep.c
Modified:
  user/gabor/tre-integration/usr.bin/grep/Makefile
  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/Makefile
==============================================================================
--- user/gabor/tre-integration/usr.bin/grep/Makefile	Sat May 28 08:34:30 2011	(r222413)
+++ user/gabor/tre-integration/usr.bin/grep/Makefile	Sat May 28 08:37:03 2011	(r222414)
@@ -3,7 +3,7 @@
 #	$OpenBSD: Makefile,v 1.6 2003/06/25 15:00:04 millert Exp $
 
 PROG=	grep
-SRCS=	fastgrep.c file.c grep.c queue.c util.c
+SRCS=	file.c grep.c queue.c util.c
 
 LINKS=	${BINDIR}/grep ${BINDIR}/egrep \
 	${BINDIR}/grep ${BINDIR}/fgrep \
@@ -22,12 +22,6 @@ WARNS?=	6
 LDADD=	-lz -lbz2
 DPADD=	${LIBZ} ${LIBBZ2}
 
-.if !defined(WITHOUT_GNU_COMPAT)
-CFLAGS+= -I/usr/include/gnu
-LDADD+=	-lgnuregex
-DPADD+=	${LIBGNUREGEX}
-.endif
-
 .if !defined(WITHOUT_NLS)
 .include "${.CURDIR}/nls/Makefile.inc"
 .else

Modified: user/gabor/tre-integration/usr.bin/grep/grep.c
==============================================================================
--- user/gabor/tre-integration/usr.bin/grep/grep.c	Sat May 28 08:34:30 2011	(r222413)
+++ user/gabor/tre-integration/usr.bin/grep/grep.c	Sat May 28 08:37:03 2011	(r222414)
@@ -83,7 +83,6 @@ bool		 matchall;
 unsigned int	 patterns, pattern_sz;
 char		**pattern;
 regex_t		*r_pattern;
-fastgrep_t	*fg_pattern;
 
 /* Filename exclusion/inclusion patterns */
 unsigned int	 fpatterns, fpattern_sz;
@@ -638,6 +637,8 @@ main(int argc, char *argv[])
 
 	switch (grepbehave) {
 	case GREP_FIXED:
+		cflags |= REG_LITERAL;
+		break;
 	case GREP_BASIC:
 		break;
 	case GREP_EXTENDED:
@@ -648,27 +649,14 @@ main(int argc, char *argv[])
 		usage();
 	}
 
-	fg_pattern = grep_calloc(patterns, sizeof(*fg_pattern));
 	r_pattern = grep_calloc(patterns, sizeof(*r_pattern));
-/*
- * XXX: fgrepcomp() and fastcomp() are workarounds for regexec() performance.
- * Optimizations should be done there.
- */
-		/* Check if cheating is allowed (always is for fgrep). */
-	if (grepbehave == GREP_FIXED) {
-		for (i = 0; i < patterns; ++i)
-			fgrepcomp(&fg_pattern[i], pattern[i]);
-	} else {
-		for (i = 0; i < patterns; ++i) {
-			if (fastcomp(&fg_pattern[i], pattern[i])) {
-				/* Fall back to full regex library */
-				c = regcomp(&r_pattern[i], pattern[i], cflags);
-				if (c != 0) {
-					regerror(c, &r_pattern[i], re_error,
-					    RE_ERROR_BUF);
-					errx(2, "%s", re_error);
-				}
-			}
+
+	for (i = 0; i < patterns; ++i) {
+		c = regcomp(&r_pattern[i], pattern[i], cflags);
+		if (c != 0) {
+			regerror(c, &r_pattern[i], re_error,
+			    RE_ERROR_BUF);
+			errx(2, "%s", re_error);
 		}
 	}
 

Modified: user/gabor/tre-integration/usr.bin/grep/grep.h
==============================================================================
--- user/gabor/tre-integration/usr.bin/grep/grep.h	Sat May 28 08:34:30 2011	(r222413)
+++ user/gabor/tre-integration/usr.bin/grep/grep.h	Sat May 28 08:37:03 2011	(r222414)
@@ -95,17 +95,6 @@ struct epat {
 	int		 mode;
 };
 
-typedef struct {
-	size_t		 len;
-	unsigned char	*pattern;
-	int		 qsBc[UCHAR_MAX + 1];
-	/* flags */
-	bool		 bol;
-	bool		 eol;
-	bool		 reversed;
-	bool		 word;
-} fastgrep_t;
-
 /* Flags passed to regcomp() and regexec() */
 extern int	 cflags, eflags;
 
@@ -125,7 +114,6 @@ extern unsigned int dpatterns, fpatterns
 extern char    **pattern;
 extern struct epat *dpattern, *fpattern;
 extern regex_t	*er_pattern, *r_pattern;
-extern fastgrep_t *fg_pattern;
 
 /* For regex errors  */
 #define RE_ERROR_BUF	512
@@ -150,8 +138,3 @@ void	 clearqueue(void);
 void		 grep_close(struct file *f);
 struct file	*grep_open(const char *path);
 char		*grep_fgetln(struct file *f, size_t *len);
-
-/* fastgrep.c */
-int		 fastcomp(fastgrep_t *, const char *);
-void		 fgrepcomp(fastgrep_t *, const char *);
-int		 grep_search(fastgrep_t *, const unsigned char *, size_t, regmatch_t *);

Modified: user/gabor/tre-integration/usr.bin/grep/util.c
==============================================================================
--- user/gabor/tre-integration/usr.bin/grep/util.c	Sat May 28 08:34:30 2011	(r222413)
+++ user/gabor/tre-integration/usr.bin/grep/util.c	Sat May 28 08:37:03 2011	(r222414)
@@ -297,22 +297,10 @@ procline(struct str *l, int nottext)
 
 			/* Loop to compare with all the patterns */
 			for (i = 0; i < patterns; i++) {
-/*
- * XXX: grep_search() is a workaround for speed up and should be
- * removed in the future.  See fastgrep.c.
- */
-				if (fg_pattern[i].pattern) {
-					r = grep_search(&fg_pattern[i],
-					    (unsigned char *)l->dat,
-					    l->len, &pmatch);
-					r = (r == 0) ? 0 : REG_NOMATCH;
-					st = pmatch.rm_eo;
-				} else {
-					r = regexec(&r_pattern[i], l->dat, 1,
-					    &pmatch, eflags);
-					r = (r == 0) ? 0 : REG_NOMATCH;
-					st = pmatch.rm_eo;
-				}
+				r = regexec(&r_pattern[i], l->dat, 1,
+				    &pmatch, eflags);
+				r = (r == 0) ? 0 : REG_NOMATCH;
+				st = pmatch.rm_eo;
 				if (r == REG_NOMATCH)
 					continue;
 				/* Check for full match */
@@ -321,7 +309,7 @@ procline(struct str *l, int nottext)
 					    (size_t)pmatch.rm_eo != l->len)
 						r = REG_NOMATCH;
 				/* Check for whole word match */
-				if (r == 0 && fg_pattern[i].word &&
+				if (r == 0 && wflag &&
 				    pmatch.rm_so != 0) {
 					wint_t wbegin, wend;
 


More information about the svn-src-user mailing list