switch (Expression->Buffer[ExpressionPosition])
{
case L'*':
- StarFound = ExpressionPosition++;
+ StarFound = MAXUSHORT;
break;
case L'?':
- ExpressionPosition++;
+ if (++ExpressionPosition == Expression->Length / sizeof(WCHAR))
+ {
+ NamePosition = Name->Length / sizeof(WCHAR);
+ break;
+ }
+
MatchingChars = NamePosition;
- while ((IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] :
- Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition] &&
- NamePosition < Name->Length / sizeof(WCHAR))
+ while (NamePosition < Name->Length / sizeof(WCHAR) &&
+ (IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] :
+ Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition])
{
NamePosition++;
}
break;
case DOS_DOT:
- while (Name->Buffer[NamePosition] != L'.' &&
- NamePosition < Name->Length / sizeof(WCHAR))
+ while (NamePosition < Name->Length / sizeof(WCHAR) &&
+ Name->Buffer[NamePosition] != L'.')
{
NamePosition++;
}
if (ExpressionPosition == Expression->Length / sizeof(WCHAR))
{
NamePosition = Name->Length / sizeof(WCHAR);
+ break;
}
}
else if (Expression->Buffer[ExpressionPosition] == DOS_STAR)
else if (StarFound != MAXUSHORT)
{
ExpressionPosition = StarFound + 1;
- while ((IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] :
- Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition] &&
- NamePosition < Name->Length / sizeof(WCHAR))
+ while (NamePosition < Name->Length / sizeof(WCHAR) &&
+ (IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] :
+ Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition])
{
NamePosition++;
}
}
else
{
- NamePosition = Name->Length / sizeof(WCHAR);
+ break;
}
}
if (ExpressionPosition + 1 == Expression->Length / sizeof(WCHAR) && NamePosition == Name->Length / sizeof(WCHAR) &&