gitattributes: fix relative path matching

There was an embarrassing pair of off-by-one miscounting that
failed to match path "a/b/c" when "a/.gitattributes" tried to
name it with relative path "b/c".

This fixes it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano
2008-02-07 00:02:08 -08:00
parent a0cf49c16a
commit cf94ccda35
2 changed files with 52 additions and 3 deletions

6
attr.c
View File

@ -406,7 +406,7 @@ static void debug_info(const char *what, struct attr_stack *elem)
{
fprintf(stderr, "%s: %s\n", what, elem->origin ? elem->origin : "()");
}
static void debug_set(const char *what, const char *match, struct git_attr *attr, void *v)
static void debug_set(const char *what, const char *match, struct git_attr *attr, const void *v)
{
const char *value = v;
@ -543,10 +543,10 @@ static int path_matches(const char *pathname, int pathlen,
if (*pattern == '/')
pattern++;
if (pathlen < baselen ||
(baselen && pathname[baselen - 1] != '/') ||
(baselen && pathname[baselen] != '/') ||
strncmp(pathname, base, baselen))
return 0;
return fnmatch(pattern, pathname + baselen, FNM_PATHNAME) == 0;
return fnmatch(pattern, pathname + baselen + 1, FNM_PATHNAME) == 0;
}
static int fill_one(const char *what, struct match_attr *a, int rem)