in src/native/windows/src/utils.c [425:457]
INT apxStrMatchW(LPCWSTR szString, LPCWSTR szPattern, BOOL bIgnoreCase)
{
int x, y;
for (x = 0, y = 0; szPattern[y]; ++y, ++x) {
if (!szPattern[x] && (szPattern[y] != L'*' || szPattern[y] != L'?'))
return -1;
if (szPattern[y] == L'*') {
while (szPattern[++y] == L'*');
if (!szPattern[y])
return 0;
while (szString[x]) {
INT rc;
if ((rc = apxStrMatchW(&szString[x++], &szPattern[y],
bIgnoreCase)) != 1)
return rc;
}
return -1;
}
else if (szPattern[y] != L'?') {
if (bIgnoreCase) {
if (CharLowerW((LPWSTR)((SIZE_T)szString[x])) !=
CharLowerW((LPWSTR)((SIZE_T)szPattern[y])))
return 1;
}
else {
if (szString[x] != szPattern[y])
return 1;
}
}
}
return (szString[x] != L'\0');
}