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 <gitster@pobox.com>

Junio C Hamano committed Mar 26, 2013 at 10:28 UTC bd2f371d34b495ebbc4689604cfc34a825c47d2b
1 file changed +10 -9
attr.c
+10 -9
@@ -655,7 +655,7 @@ static void prepare_attr_stack(const char *path, int dirlen)
655 }
656
657 static int path_matches(const char *pathname, int pathlen,
658 - const char *basename,
658 + int basename_offset,
659 const struct pattern *pat,
660 const char *base, int baselen)
661 {
@@ -667,8 +667,8 @@ static int path_matches(const char *pathname, int pathlen,
667 return 0;
668
669 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,
672 pattern, prefix,
673 pat->patternlen, pat->flags);
674 }
@@ -701,7 +701,7 @@ static int fill_one(const char *what, struct match_attr *a, int rem)
701 return rem;
702 }
703
704 -static int fill(const char *path, int pathlen, const char *basename,
704 +static int fill(const char *path, int pathlen, int basename_offset,
705 struct attr_stack *stk, int rem)
706 {
707 int i;
@@ -711,7 +711,7 @@ static int fill(const char *path, int pathlen, const char *basename,
711 struct match_attr *a = stk->attrs[i];
712 if (a->is_macro)
713 continue;
714 - if (path_matches(path, pathlen, basename,
714 + if (path_matches(path, pathlen, basename_offset,
715 &a->u.pat, base, stk->originlen))
716 rem = fill_one("fill", a, rem);
717 }
@@ -750,7 +750,8 @@ static void collect_all_attrs(const char *path)
750 {
751 struct attr_stack *stk;
752 int i, pathlen, rem, dirlen;
753 - const char *basename, *cp, *last_slash = NULL;
753 + const char *cp, *last_slash = NULL;
754 + int basename_offset;
755
756 for (cp = path; *cp; cp++) {
757 if (*cp == '/' && cp[1])
@@ -758,10 +759,10 @@ static void collect_all_attrs(const char *path)
759 }
760 pathlen = cp - path;
761 if (last_slash) {
761 - basename = last_slash + 1;
762 + basename_offset = last_slash + 1 - path;
763 dirlen = last_slash - path;
764 } else {
764 - basename = path;
765 + basename_offset = 0;
766 dirlen = 0;
767 }
768
@@ -771,7 +772,7 @@ static void collect_all_attrs(const char *path)
772
773 rem = attr_nr;
774 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);
776 }
777
778 int git_check_attr(const char *path, int num, struct git_attr_check *check)