[PATCH/RFC 1/4] grep: prepare for re-using the space of the regexp member in struct grep_pat

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Bert Wesarg <bert.wesarg@xxxxxxxxxxxxxx>
---
 grep.c |   12 ++++++------
 grep.h |    4 +++-
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/grep.c b/grep.c
index 63c4280..b8eda9e 100644
--- a/grep.c
+++ b/grep.c
@@ -70,7 +70,7 @@ static void compile_regexp(struct grep_pat *p, struct grep_opt *opt)
 	if (p->fixed)
 		return;
 
-	err = regcomp(&p->regexp, p->pattern, opt->regflags);
+	err = regcomp(&p->u.regexp, p->pattern, opt->regflags);
 	if (err) {
 		char errbuf[1024];
 		char where[1024];
@@ -81,8 +81,8 @@ static void compile_regexp(struct grep_pat *p, struct grep_opt *opt)
 			sprintf(where, "%s, ", p->origin);
 		else
 			where[0] = 0;
-		regerror(err, &p->regexp, errbuf, 1024);
-		regfree(&p->regexp);
+		regerror(err, &p->u.regexp, errbuf, 1024);
+		regfree(&p->u.regexp);
 		die("%s'%s': %s", where, p->pattern, errbuf);
 	}
 }
@@ -320,7 +320,7 @@ void free_grep_patterns(struct grep_opt *opt)
 		case GREP_PATTERN: /* atom */
 		case GREP_PATTERN_HEAD:
 		case GREP_PATTERN_BODY:
-			regfree(&p->regexp);
+			regfree(&p->u.regexp);
 			break;
 		default:
 			break;
@@ -464,7 +464,7 @@ static int match_one_pattern(struct grep_pat *p, char *bol, char *eol,
 	if (p->fixed)
 		hit = !fixmatch(p, bol, eol, pmatch);
 	else
-		hit = !regmatch(&p->regexp, bol, eol, pmatch, eflags);
+		hit = !regmatch(&p->u.regexp, bol, eol, pmatch, eflags);
 
 	if (hit && p->word_regexp) {
 		if ((pmatch[0].rm_so < 0) ||
@@ -794,7 +794,7 @@ static int look_ahead(struct grep_opt *opt,
 		if (p->fixed)
 			hit = !fixmatch(p, bol, bol + *left_p, &m);
 		else
-			hit = !regmatch(&p->regexp, bol, bol + *left_p, &m, 0);
+			hit = !regmatch(&p->u.regexp, bol, bol + *left_p, &m, 0);
 		if (!hit || m.rm_so < 0 || m.rm_eo < 0)
 			continue;
 		if (earliest < 0 || m.rm_so < earliest)
diff --git a/grep.h b/grep.h
index 06621fe..9912c11 100644
--- a/grep.h
+++ b/grep.h
@@ -32,7 +32,9 @@ struct grep_pat {
 	const char *pattern;
 	size_t patternlen;
 	enum grep_header_field field;
-	regex_t regexp;
+	union {
+		regex_t regexp;
+	} u;
 	unsigned fixed:1;
 	unsigned ignore_case:1;
 	unsigned word_regexp:1;
-- 
1.7.5.349.gfeb1a

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]