diff --git a/builtin/blame.c b/builtin/blame.c index f685b38a2f..269c64873e 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -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; }