@@ -639,13 +639,11 @@ static void prepare_attr_stack(const char *path)
639639}
640640
641641static int path_matches (const char * pathname , int pathlen ,
642+ const char * basename ,
642643 const char * pattern ,
643644 const char * base , int baselen )
644645{
645646 if (!strchr (pattern , '/' )) {
646- /* match basename */
647- const char * basename = strrchr (pathname , '/' );
648- basename = basename ? basename + 1 : pathname ;
649647 return (fnmatch_icase (pattern , basename , 0 ) == 0 );
650648 }
651649 /*
@@ -687,7 +685,8 @@ static int fill_one(const char *what, struct match_attr *a, int rem)
687685 return rem ;
688686}
689687
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 )
691690{
692691 int i ;
693692 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)
696695 struct match_attr * a = stk -> attrs [i ];
697696 if (a -> is_macro )
698697 continue ;
699- if (path_matches (path , pathlen ,
698+ if (path_matches (path , pathlen , basename ,
700699 a -> u .pattern , base , stk -> originlen ))
701700 rem = fill_one ("fill" , a , rem );
702701 }
@@ -735,15 +734,19 @@ static void collect_all_attrs(const char *path)
735734{
736735 struct attr_stack * stk ;
737736 int i , pathlen , rem ;
737+ const char * basename ;
738738
739739 prepare_attr_stack (path );
740740 for (i = 0 ; i < attr_nr ; i ++ )
741741 check_all_attr [i ].value = ATTR__UNKNOWN ;
742742
743+ basename = strrchr (path , '/' );
744+ basename = basename ? basename + 1 : path ;
745+
743746 pathlen = strlen (path );
744747 rem = attr_nr ;
745748 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 );
747750}
748751
749752int git_check_attr (const char * path , int num , struct git_attr_check * check )
0 commit comments