svn commit: r224803 - user/gabor/tre-integration/usr.bin/grep
Gabor Kovesdan
gabor at FreeBSD.org
Fri Aug 12 16:21:06 UTC 2011
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++;
More information about the svn-src-user
mailing list