]> git.ipfire.org Git - thirdparty/git.git/commitdiff
grep: stop modifying buffer in grep_source_1()
authorJeff King <peff@peff.net>
Tue, 21 Sep 2021 03:48:44 +0000 (23:48 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 22 Sep 2021 18:59:50 +0000 (11:59 -0700)
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>
grep.c

diff --git a/grep.c b/grep.c
index 70af01d1c1198448053b923c14c485fc6578ecf8..32c4641443b48395374a797e413b0ac6a726e69c 100644 (file)
--- a/grep.c
+++ b/grep.c
@@ -1616,7 +1616,7 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle
        bol = gs->buf;
        left = gs->size;
        while (left) {
-               char *eol, ch;
+               char *eol;
                int hit;
                ssize_t cno;
                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))
                        break;
                eol = end_of_line(bol, &left);
-               ch = *eol;
-               *eol = 0;
 
                if ((ctx == GREP_CONTEXT_HEAD) && (eol == bol))
                        ctx = GREP_CONTEXT_BODY;
 
                hit = match_line(opt, bol, eol, &col, &icol, ctx, collect_hits);
-               *eol = ch;
 
                if (collect_hits)
                        goto next_line;