Failing sometimes:
bool WildcardMatch(const char* psz, const char* mask)
{
loop
{
switch (*mask)
{
case '\0':
return (*psz == '\0');
case '*':
return WildcardMatch(psz, mask+1) || (*psz && WildcardMatch(psz+1, mask));
case '?':
if (*psz == '\0')
return false;
break;
default:
if (*psz != *mask)
return false;
break;
}
psz++;
mask++;
}
}
Working always:
bool WildcardMatch(const char* psz, const char* mask) {
loop {
if (*mask == '\0') return (*psz == '\0');
else if (*mask == '*') return WildcardMatch(psz, mask+1) || (*psz && WildcardMatch(psz+1, mask));
else if (*mask == '?') if (*psz == '\0') return 0;
else if (*psz != *mask) return 0;
psz++;
mask++;
}
}