Skip to content

Commit cc8e26e

Browse files
peffgitster
authored andcommitted
grep: stop modifying buffer in strip_timestamp
When grepping for headers in commit objects, we receive individual lines (e.g., "author Name <email> 1234 -0000"), and then strip off the timestamp to do our match. We do so by writing a NUL byte over the whitespace separator, and then remembering to restore it later. We had to do it this way when this was added back in a4d7d2c (log --author/--committer: really match only with name part, 2008-09-04), because we fed the result directly to regexec(), which expects a NUL-terminated string. But since b7d36ff (regex: use regexec_buf(), 2016-09-21), we have a function which can match part of a buffer. So instead of modifying the string, we can instead just move the "eol" pointer, and the rest of the code will do the right thing. This will let further patches mark more buffers as "const". Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 99c99ed commit cc8e26e

File tree

1 file changed

+3
-10
lines changed

1 file changed

+3
-10
lines changed

grep.c

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -922,20 +922,16 @@ static int patmatch(struct grep_pat *p, char *line, char *eol,
922922
return hit;
923923
}
924924

925-
static int strip_timestamp(char *bol, char **eol_p)
925+
static void strip_timestamp(char *bol, char **eol_p)
926926
{
927927
char *eol = *eol_p;
928-
int ch;
929928

930929
while (bol < --eol) {
931930
if (*eol != '>')
932931
continue;
933932
*eol_p = ++eol;
934-
ch = *eol;
935-
*eol = '\0';
936-
return ch;
933+
break;
937934
}
938-
return 0;
939935
}
940936

941937
static struct {
@@ -952,7 +948,6 @@ static int match_one_pattern(struct grep_pat *p, char *bol, char *eol,
952948
regmatch_t *pmatch, int eflags)
953949
{
954950
int hit = 0;
955-
int saved_ch = 0;
956951
const char *start = bol;
957952

958953
if ((p->token != GREP_PATTERN) &&
@@ -971,7 +966,7 @@ static int match_one_pattern(struct grep_pat *p, char *bol, char *eol,
971966
switch (p->field) {
972967
case GREP_HEADER_AUTHOR:
973968
case GREP_HEADER_COMMITTER:
974-
saved_ch = strip_timestamp(bol, &eol);
969+
strip_timestamp(bol, &eol);
975970
break;
976971
default:
977972
break;
@@ -1021,8 +1016,6 @@ static int match_one_pattern(struct grep_pat *p, char *bol, char *eol,
10211016
goto again;
10221017
}
10231018
}
1024-
if (p->token == GREP_PATTERN_HEAD && saved_ch)
1025-
*eol = saved_ch;
10261019
if (hit) {
10271020
pmatch[0].rm_so += bol - start;
10281021
pmatch[0].rm_eo += bol - start;

0 commit comments

Comments
 (0)