mirror of
https://github.com/git/git.git
synced 2024-11-25 02:44:48 +08:00
blame: simplify prepare_lines()
Changing get_next_line() to return the end pointer instead of NULL in case no newline character is found treats allows us to treat complete and incomplete lines the same, simplifying the code. Switching to counting lines instead of EOLs allows us to start counting at the first character, instead of having to call get_next_line() first. Signed-off-by: Rene Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
29aa0b2061
commit
60d85e110b
@ -1744,7 +1744,7 @@ static void output(struct scoreboard *sb, int option)
|
||||
static const char *get_next_line(const char *start, const char *end)
|
||||
{
|
||||
const char *nl = memchr(start, '\n', end - start);
|
||||
return nl ? nl + 1 : NULL;
|
||||
return nl ? nl + 1 : end;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1758,25 +1758,19 @@ static int prepare_lines(struct scoreboard *sb)
|
||||
const char *end = buf + len;
|
||||
const char *p;
|
||||
int *lineno;
|
||||
int num = 0, incomplete = 0;
|
||||
int num = 0;
|
||||
|
||||
for (p = get_next_line(buf, end); p; p = get_next_line(p, end))
|
||||
for (p = buf; p < end; p = get_next_line(p, end))
|
||||
num++;
|
||||
|
||||
if (len && end[-1] != '\n')
|
||||
incomplete++; /* incomplete line at the end */
|
||||
sb->lineno = lineno = xmalloc(sizeof(*sb->lineno) * (num + 1));
|
||||
|
||||
sb->lineno = xmalloc(sizeof(*sb->lineno) * (num + incomplete + 1));
|
||||
lineno = sb->lineno;
|
||||
|
||||
*lineno++ = 0;
|
||||
for (p = get_next_line(buf, end); p; p = get_next_line(p, end))
|
||||
for (p = buf; p < end; p = get_next_line(p, end))
|
||||
*lineno++ = p - buf;
|
||||
|
||||
if (incomplete)
|
||||
*lineno++ = len;
|
||||
*lineno = len;
|
||||
|
||||
sb->num_lines = num + incomplete;
|
||||
sb->num_lines = num;
|
||||
return sb->num_lines;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user