diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/regex/glob.c | 8 | 
1 files changed, 5 insertions, 3 deletions
diff --git a/src/regex/glob.c b/src/regex/glob.c index 6f8425ca..85671985 100644 --- a/src/regex/glob.c +++ b/src/regex/glob.c @@ -100,9 +100,11 @@ static int match_in_dir(const char *d, const char *p, int flags, int (*errfunc)(  			continue;  		if (p2 && de->d_type && !S_ISDIR(de->d_type<<12) && !S_ISLNK(de->d_type<<12))  			continue; -		if (p2 && de->d_name[0]=='.' && !de->d_name[1]) -			continue; -		if (p2 && de->d_name[0]=='.' && de->d_name[1]=='.' && !de->d_name[2]) +		/* With GLOB_PERIOD, don't allow matching . or .. unless +		 * fnmatch would match them with FNM_PERIOD rules in effect. */ +		if (p2 && (flags & GLOB_PERIOD) && de->d_name[0]=='.' +		    && (!de->d_name[1] || de->d_name[1]=='.' && !de->d_name[2]) +		    && fnmatch(p, de->d_name, fnm_flags | FNM_PERIOD))  			continue;  		if (*d) {  			memcpy(name, d, l);  | 
