@@ -639,13 +639,11 @@ static void prepare_attr_stack(const char *path)
639
639
}
640
640
641
641
static int path_matches (const char * pathname , int pathlen ,
642
+ const char * basename ,
642
643
const char * pattern ,
643
644
const char * base , int baselen )
644
645
{
645
646
if (!strchr (pattern , '/' )) {
646
- /* match basename */
647
- const char * basename = strrchr (pathname , '/' );
648
- basename = basename ? basename + 1 : pathname ;
649
647
return (fnmatch_icase (pattern , basename , 0 ) == 0 );
650
648
}
651
649
/*
@@ -687,7 +685,8 @@ static int fill_one(const char *what, struct match_attr *a, int rem)
687
685
return rem ;
688
686
}
689
687
690
- static int fill (const char * path , int pathlen , struct attr_stack * stk , int rem )
688
+ static int fill (const char * path , int pathlen , const char * basename ,
689
+ struct attr_stack * stk , int rem )
691
690
{
692
691
int i ;
693
692
const char * base = stk -> origin ? stk -> origin : "" ;
@@ -696,7 +695,7 @@ static int fill(const char *path, int pathlen, struct attr_stack *stk, int rem)
696
695
struct match_attr * a = stk -> attrs [i ];
697
696
if (a -> is_macro )
698
697
continue ;
699
- if (path_matches (path , pathlen ,
698
+ if (path_matches (path , pathlen , basename ,
700
699
a -> u .pattern , base , stk -> originlen ))
701
700
rem = fill_one ("fill" , a , rem );
702
701
}
@@ -735,15 +734,19 @@ static void collect_all_attrs(const char *path)
735
734
{
736
735
struct attr_stack * stk ;
737
736
int i , pathlen , rem ;
737
+ const char * basename ;
738
738
739
739
prepare_attr_stack (path );
740
740
for (i = 0 ; i < attr_nr ; i ++ )
741
741
check_all_attr [i ].value = ATTR__UNKNOWN ;
742
742
743
+ basename = strrchr (path , '/' );
744
+ basename = basename ? basename + 1 : path ;
745
+
743
746
pathlen = strlen (path );
744
747
rem = attr_nr ;
745
748
for (stk = attr_stack ; 0 < rem && stk ; stk = stk -> prev )
746
- rem = fill (path , pathlen , stk , rem );
749
+ rem = fill (path , pathlen , basename , stk , rem );
747
750
}
748
751
749
752
int git_check_attr (const char * path , int num , struct git_attr_check * check )
0 commit comments