Re: [PATCH] common_prefix: be more careful about pathspec bounds
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jun 15, 2010, 16:06 UTC
- Message-ID
- <7v4oh48elm.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <7v8w6g8hfx.fsf@alter.siamese.dyndns.org>
Junio C Hamano <gitster@pobox.com> writes:
> Isn't it more intuitive to structure the loop by saying 'Ok, if "path" up > to the currently proposed "prefix" is too long to match, let's shorten it > by one path component and try again'?
Another way of saying this, which probably needs less number of scans, would be to shorten prefix to what is known to match --- use of memcmp() discards this information.
static int common_prefix(const char **pathspec)
{
const char *path, *slash, *next;
int prefix;if (!pathspec) return 0;
path = *pathspec; slash = strrchr(path, '/'); if (!slash) return 0; prefix = slash - path + 1;
while ((next = *++pathspec) != NULL) {
int len, last_matching_slash = -1;
for (len = 0;
len < prefix && next[len] == path[len];
len++)
if (next[len] == '/')
last_matching_slash = len;
if (len == prefix)
continue;
if (last_matching_slash < 0)
return 0;
prefix = last_matching_slash + 1;
}
return prefix;
}