bool match(const char *pattern,const char *string,bool ForceCase) { for (;; ++string) { char stringc=toupperc(*string,ForceCase); char patternc=toupperc(*pattern++,ForceCase); switch (patternc) { case 0: return(stringc==0); case '?': if (stringc == 0) return(false); break; case '*': if (*pattern==0) return(true); if (*pattern=='.') { if (pattern[1]=='*' && pattern[2]==0) return(true); const char *dot=strchr(string,'.'); if (pattern[1]==0) return (dot==NULL || dot[1]==0); if (dot!=NULL) { string=dot; if (strpbrk(pattern,"*?")==NULL && strchr(string+1,'.')==NULL) return(mstricompc(pattern+1,string+1,ForceCase)==0); } } while (*string) if (match(pattern,string++,ForceCase)) return(true); return(false); default: if (patternc != stringc) { // Allow "name." mask match "name" and "name.\" match "name\". if (patternc=='.' && (stringc==0 || stringc=='\\' || stringc=='.')) return(match(pattern,string,ForceCase)); else return(false); } break; } } }
bool match(char *pattern,char *string) { for (;; ++string) { char stringc=toupperc(*string); char patternc=toupperc(*pattern++); switch (patternc) { case 0: return(stringc==0); case '?': if (stringc == 0) return(false); break; case '*': if (*pattern==0) return(true); if (*pattern=='.') { if (pattern[1]=='*' && pattern[2]==0) return(true); char *dot=strchr(string,'.'); if (pattern[1]==0) return (dot==NULL || dot[1]==0); if (dot!=NULL) { string=dot; if (strpbrk(pattern,"*?")==NULL && strchr(string+1,'.')==NULL) return(stricompc(pattern+1,string+1)==0); } } while (*string) if (match(pattern,string++)) return(true); return(false); default: if (patternc != stringc) if (patternc=='.' && stringc==0) return(match(pattern,string)); else return(false); break; } } }