David Kastrup <d...@gnu.org> writes:

> Making a single preparation run for counting the lines will avoid memory
> fragmentation.  Also, fix the allocated memory size which was wrong
> when sizeof(int *) != sizeof(int), and would have been too small
> for sizeof(int *) < sizeof(int), admittedly unlikely.
>
> Signed-off-by: David Kastrup <d...@gnu.org>
> ---

I think I took sizeof(int*)->sizeof(int) patch to the 'next' branch
already, which might have to conflict with this clean-up, but it
should be trivial to resolve.

Thanks for resending.  I was busy elsewhere (i.e. "no feedback" does
not mean "silent rejection" nor "silent agreement" at least from
me), and such a resend does help prevent patches fall thru cracks.

> diff --git a/builtin/blame.c b/builtin/blame.c
> index e44a6bb..1aefedf 100644
> --- a/builtin/blame.c
> +++ b/builtin/blame.c
> @@ -1772,25 +1772,41 @@ static int prepare_lines(struct scoreboard *sb)
>  {
>       const char *buf = sb->final_buf;
>       unsigned long len = sb->final_buf_size;
> +     const char *end = buf + len;
> +     const char *p;
> +     int *lineno;
> +     int num = 0, incomplete = 0;
>  
> +     for (p = buf;;) {
> +             p = memchr(p, '\n', end - p);
> +             if (p) {
> +                     p++;
>                       num++;
> +                     continue;
>               }
> +             break;
>       }
> +
> +     if (len && end[-1] != '\n')
> +             incomplete++; /* incomplete line at the end */
> +
> +     sb->lineno = xmalloc(sizeof(*sb->lineno) * (num + incomplete + 1));
> +     lineno = sb->lineno;
> +
> +     *lineno++ = 0;
> +     for (p = buf;;) {
> +             p = memchr(p, '\n', end - p);
> +             if (p) {
> +                     p++;
> +                     *lineno++ = p - buf;
> +                     continue;
> +             }
> +             break;
> +     }
> +
> +     if (incomplete)
> +             *lineno++ = len;
> +
>       sb->num_lines = num + incomplete;
>       return sb->num_lines;
>  }
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to