Re: [PATCH 2/2] blame: simplify prepare_lines()
- From
René Scharfe <l.s.r@web.de>
- Date
- Jun 13, 2014, 21:33 UTC
- Message-ID
- <539B6E31.1080901@web.de>
- In-Reply-To
- <20140613211339.GL8557@google.com>
Am 13.06.2014 23:13, schrieb Jonathan Nieder:
Show 12 quoted lines
> René Scharfe wrote: > >> - if (incomplete) >> - *lineno++ = len; >> + *lineno = len; >> >> - sb->num_lines = num + incomplete; >> + sb->num_lines = num; > > This will always treat whatever comes after the last newline as an > incomplete line, even if it has zero length. Is that safe? (Not a > rhetorical question --- I haven't looked carefully at the caller.)
There is no need to look at the caller -- the contents of the lineno array is not (intended to be) changed by the patch.
The original code is:
p = memchr(p, '\n', end - p);
if (p) {
p++;
*lineno++ = p - buf;
continue;
}Suppose there is no incomplete line. For the last EOL of a buffer, p points to buf[len - 1] after the memchr call. Then it is incremented. Then buf + len - buf is written into the last lineno member -- same as after the patch.
Makes sense?
René