diff --git a/src/xpdev/dirwrap.c b/src/xpdev/dirwrap.c index ddd99bcc21c1b5d7c8d90cb44176a1a16b3c4d40..6591fb0e4f2e2c42f845c0a2a4365863893ca3bd 100644 --- a/src/xpdev/dirwrap.c +++ b/src/xpdev/dirwrap.c @@ -939,10 +939,12 @@ BOOL DLLCALL isfullpath(const char* filename) /* Matches file name against filespec */ /* Optionally not allowing * to match PATH_DELIM (for paths) */ /****************************************************************************/ + BOOL DLLCALL wildmatch(const char *fname, const char *spec, BOOL path) { char *specp; char *fnamep; + char *wildend; specp=(char *)spec; fnamep=(char *)fname; @@ -959,10 +961,21 @@ BOOL DLLCALL wildmatch(const char *fname, const char *spec, BOOL path) case '*': while(*specp=='*') specp++; - for(;*fnamep!=*specp && *fnamep;fnamep++) { - if(path && IS_PATH_DELIM(*fnamep)) - return(FALSE); + if(path) { + for(wildend=fnamep; *wildend; wildend++) { + if(IS_PATH_DELIM(*wildend)) { + wildend--; + break; + } + } + } + else + wildend=strchr(fnamep, 0); + for(;wildend >= fnamep;wildend--) { + if(wildmatch(wildend, specp, path)) + return(TRUE); } + return(FALSE); default: if(*specp != *fnamep) return(FALSE);