grep: stop modifying buffer in grep_source_1()
We find the end of each matching line of a buffer, and then temporarily write a NUL to turn it into a regular C string. But we don't need to do so, because the only thing we do in the interim is pass the line and its length (via an "eol" pointer) to match_line(). And that function should only look at the bytes we passed it, whether it has a terminating NUL or not. We can drop this temporary write in order to simplify the code and make it easier to use const buffers in more of grep.c. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
995e525b17
commit
f84e79ff4b
5
grep.c
5
grep.c
|
@ -1616,7 +1616,7 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle
|
||||||
bol = gs->buf;
|
bol = gs->buf;
|
||||||
left = gs->size;
|
left = gs->size;
|
||||||
while (left) {
|
while (left) {
|
||||||
char *eol, ch;
|
char *eol;
|
||||||
int hit;
|
int hit;
|
||||||
ssize_t cno;
|
ssize_t cno;
|
||||||
ssize_t col = -1, icol = -1;
|
ssize_t col = -1, icol = -1;
|
||||||
|
@ -1637,14 +1637,11 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle
|
||||||
&& look_ahead(opt, &left, &lno, &bol))
|
&& look_ahead(opt, &left, &lno, &bol))
|
||||||
break;
|
break;
|
||||||
eol = end_of_line(bol, &left);
|
eol = end_of_line(bol, &left);
|
||||||
ch = *eol;
|
|
||||||
*eol = 0;
|
|
||||||
|
|
||||||
if ((ctx == GREP_CONTEXT_HEAD) && (eol == bol))
|
if ((ctx == GREP_CONTEXT_HEAD) && (eol == bol))
|
||||||
ctx = GREP_CONTEXT_BODY;
|
ctx = GREP_CONTEXT_BODY;
|
||||||
|
|
||||||
hit = match_line(opt, bol, eol, &col, &icol, ctx, collect_hits);
|
hit = match_line(opt, bol, eol, &col, &icol, ctx, collect_hits);
|
||||||
*eol = ch;
|
|
||||||
|
|
||||||
if (collect_hits)
|
if (collect_hits)
|
||||||
goto next_line;
|
goto next_line;
|
||||||
|
|
Loading…
Reference in New Issue