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>