Skip to content

Commit bd2f371

Browse files
committed
attr.c::path_matches(): the basename is part of the pathname
The function takes two strings (pathname and basename) as if they are independent strings, but in reality, the latter is always pointing into a substring in the former. Clarify this relationship by expressing the latter as an offset into the former. Signed-off-by: Junio C Hamano <[email protected]>
1 parent 9db9eec commit bd2f371

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

attr.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -655,7 +655,7 @@ static void prepare_attr_stack(const char *path, int dirlen)
655655
}
656656

657657
static int path_matches(const char *pathname, int pathlen,
658-
const char *basename,
658+
int basename_offset,
659659
const struct pattern *pat,
660660
const char *base, int baselen)
661661
{
@@ -667,8 +667,8 @@ static int path_matches(const char *pathname, int pathlen,
667667
return 0;
668668

669669
if (pat->flags & EXC_FLAG_NODIR) {
670-
return match_basename(basename,
671-
pathlen - (basename - pathname),
670+
return match_basename(pathname + basename_offset,
671+
pathlen - basename_offset,
672672
pattern, prefix,
673673
pat->patternlen, pat->flags);
674674
}
@@ -701,7 +701,7 @@ static int fill_one(const char *what, struct match_attr *a, int rem)
701701
return rem;
702702
}
703703

704-
static int fill(const char *path, int pathlen, const char *basename,
704+
static int fill(const char *path, int pathlen, int basename_offset,
705705
struct attr_stack *stk, int rem)
706706
{
707707
int i;
@@ -711,7 +711,7 @@ static int fill(const char *path, int pathlen, const char *basename,
711711
struct match_attr *a = stk->attrs[i];
712712
if (a->is_macro)
713713
continue;
714-
if (path_matches(path, pathlen, basename,
714+
if (path_matches(path, pathlen, basename_offset,
715715
&a->u.pat, base, stk->originlen))
716716
rem = fill_one("fill", a, rem);
717717
}
@@ -750,18 +750,19 @@ static void collect_all_attrs(const char *path)
750750
{
751751
struct attr_stack *stk;
752752
int i, pathlen, rem, dirlen;
753-
const char *basename, *cp, *last_slash = NULL;
753+
const char *cp, *last_slash = NULL;
754+
int basename_offset;
754755

755756
for (cp = path; *cp; cp++) {
756757
if (*cp == '/' && cp[1])
757758
last_slash = cp;
758759
}
759760
pathlen = cp - path;
760761
if (last_slash) {
761-
basename = last_slash + 1;
762+
basename_offset = last_slash + 1 - path;
762763
dirlen = last_slash - path;
763764
} else {
764-
basename = path;
765+
basename_offset = 0;
765766
dirlen = 0;
766767
}
767768

@@ -771,7 +772,7 @@ static void collect_all_attrs(const char *path)
771772

772773
rem = attr_nr;
773774
for (stk = attr_stack; 0 < rem && stk; stk = stk->prev)
774-
rem = fill(path, pathlen, basename, stk, rem);
775+
rem = fill(path, pathlen, basename_offset, stk, rem);
775776
}
776777

777778
int git_check_attr(const char *path, int num, struct git_attr_check *check)

0 commit comments

Comments
 (0)