Date: Sun, 12 Jun 2011 12:51:58 +0000 (UTC) From: Gabor Kovesdan <gabor@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r223009 - head/usr.bin/grep Message-ID: <201106121251.p5CCpwSX025453@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: gabor Date: Sun Jun 12 12:51:58 2011 New Revision: 223009 URL: http://svn.freebsd.org/changeset/base/223009 Log: - Use REG_NOSUB to bypass submatch counting when not necessary. This may yield in somewhat better performance in a few cases. Approved by: delphij (mentor) Modified: head/usr.bin/grep/grep.c head/usr.bin/grep/util.c Modified: head/usr.bin/grep/grep.c ============================================================================== --- head/usr.bin/grep/grep.c Sun Jun 12 12:44:02 2011 (r223008) +++ head/usr.bin/grep/grep.c Sun Jun 12 12:51:58 2011 (r223009) @@ -73,7 +73,7 @@ const char *errstr[] = { }; /* Flags passed to regcomp() and regexec() */ -int cflags = 0; +int cflags = REG_NOSUB; int eflags = REG_STARTEND; /* Shortcut for matching all cases like empty regex */ @@ -519,6 +519,7 @@ main(int argc, char *argv[]) break; case 'o': oflag = true; + cflags &= ~REG_NOSUB; break; case 'p': linkbehave = LINK_SKIP; @@ -552,9 +553,11 @@ main(int argc, char *argv[]) break; case 'w': wflag = true; + cflags &= ~REG_NOSUB; break; case 'x': xflag = true; + cflags &= ~REG_NOSUB; break; case 'Z': filebehave = FILE_GZIP; @@ -588,6 +591,7 @@ 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; Modified: head/usr.bin/grep/util.c ============================================================================== --- head/usr.bin/grep/util.c Sun Jun 12 12:44:02 2011 (r223008) +++ head/usr.bin/grep/util.c Sun Jun 12 12:51:58 2011 (r223009) @@ -309,7 +309,9 @@ procline(struct str *l, int nottext) r = regexec(&r_pattern[i], l->dat, 1, &pmatch, eflags); r = (r == 0) ? 0 : REG_NOMATCH; - st = pmatch.rm_eo; + st = (cflags & REG_NOSUB) + ? (size_t)l->len + : (size_t)pmatch.rm_eo; if (r == REG_NOMATCH) continue; /* Check for full match */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201106121251.p5CCpwSX025453>