diff --git a/src/xpdev/dirwrap.c b/src/xpdev/dirwrap.c index 273dab80e5e3ac0babde2cb38afa8c0e4f8ebd2f..7394cfb37dd89ef39a333809678c4289149e8603 100644 --- a/src/xpdev/dirwrap.c +++ b/src/xpdev/dirwrap.c @@ -859,3 +859,44 @@ BOOL DLLCALL isfullpath(const char* filename) #endif ); } + +/****************************************************************************/ +/* 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; + + specp=(char *)spec; + fnamep=(char *)fname; + for(;;specp++, fnamep++) { + switch(*specp) { + case '?': + if(!(*fnamep)) + return(FALSE); + break; + case 0: + if(!*fnamep) + return(TRUE); + break; + case '*': + specp++; + for(;*fnamep!=*specp && *fnamep;fnamep++) { + if(path && IS_PATH_DELIM(*fnamep)) + return(FALSE); + } + default: + if(*specp != *fnamep) + return(FALSE); + } + if(!(*specp && *fnamep)) + break; + } + while(*specp=='*') + specp++; + if(*specp==*fnamep) + return(TRUE); + return(FALSE); +} diff --git a/src/xpdev/dirwrap.h b/src/xpdev/dirwrap.h index c2bcd23d8de29c979642126dffd4288f09bded1f..1677b0c5531e949515d86641d776f8a61bfa4eb0 100644 --- a/src/xpdev/dirwrap.h +++ b/src/xpdev/dirwrap.h @@ -230,6 +230,8 @@ DLLEXPORT int DLLCALL getfattr(const char* filename); DLLEXPORT ulong DLLCALL getfreediskspace(const char* path, ulong unit); DLLEXPORT ulong DLLCALL delfiles(char *inpath, char *spec); DLLEXPORT char* DLLCALL backslash(char* path); +DLLEXPORT BOOL DLLCALL wildmatch(const char *fname, const char *spec, BOOL path); + #if defined(__unix__) DLLEXPORT void DLLCALL _splitpath(const char *path, char *drive, char *dir,