mirror of
https://github.com/reactos/reactos.git
synced 2024-10-15 13:45:58 +00:00
[NTOSKRNL]
Improved * WC handling for both FsRtlIsNameInExpression & FsRtlIsDbcsInExpression This fixes all failing tests in kmtest svn path=/trunk/; revision=50685
This commit is contained in:
parent
b607fcee93
commit
2ac5519cc7
|
@ -174,6 +174,45 @@ FsRtlIsDbcsInExpression(IN PANSI_STRING Expression,
|
||||||
NamePosition++;
|
NamePosition++;
|
||||||
ExpressionPosition++;
|
ExpressionPosition++;
|
||||||
}
|
}
|
||||||
|
else if (StarFound != MAXUSHORT && (Expression->Buffer[StarFound + 1] == '*' ||
|
||||||
|
Expression->Buffer[StarFound + 1] == '?' || Expression->Buffer[StarFound + 1] == ANSI_DOS_DOT))
|
||||||
|
{
|
||||||
|
ExpressionPosition = StarFound + 1;
|
||||||
|
switch (Expression->Buffer[ExpressionPosition])
|
||||||
|
{
|
||||||
|
case '*':
|
||||||
|
StarFound = ExpressionPosition++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '?':
|
||||||
|
ExpressionPosition++;
|
||||||
|
MatchingChars = NamePosition;
|
||||||
|
while (Name->Buffer[NamePosition] != Expression->Buffer[ExpressionPosition] &&
|
||||||
|
NamePosition < Name->Length)
|
||||||
|
{
|
||||||
|
NamePosition++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NamePosition - MatchingChars > 0)
|
||||||
|
{
|
||||||
|
StarFound = MAXUSHORT;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ANSI_DOS_DOT:
|
||||||
|
while (Name->Buffer[NamePosition] != '.' && NamePosition < Name->Length)
|
||||||
|
{
|
||||||
|
NamePosition++;
|
||||||
|
}
|
||||||
|
ExpressionPosition++;
|
||||||
|
StarFound = MAXUSHORT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
/* Should never happen */
|
||||||
|
ASSERT(FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
else if ((Expression->Buffer[ExpressionPosition] == '?') || (Expression->Buffer[ExpressionPosition] == ANSI_DOS_QM) ||
|
else if ((Expression->Buffer[ExpressionPosition] == '?') || (Expression->Buffer[ExpressionPosition] == ANSI_DOS_QM) ||
|
||||||
(Expression->Buffer[ExpressionPosition] == ANSI_DOS_DOT && Name->Buffer[NamePosition] == '.'))
|
(Expression->Buffer[ExpressionPosition] == ANSI_DOS_DOT && Name->Buffer[NamePosition] == '.'))
|
||||||
{
|
{
|
||||||
|
@ -206,15 +245,10 @@ FsRtlIsDbcsInExpression(IN PANSI_STRING Expression,
|
||||||
else if (StarFound != MAXUSHORT)
|
else if (StarFound != MAXUSHORT)
|
||||||
{
|
{
|
||||||
ExpressionPosition = StarFound + 1;
|
ExpressionPosition = StarFound + 1;
|
||||||
if (Expression->Buffer[ExpressionPosition] != '*' && Expression->Buffer[ExpressionPosition] != '?' &&
|
while (Name->Buffer[NamePosition] != Expression->Buffer[ExpressionPosition] &&
|
||||||
Expression->Buffer[ExpressionPosition] != ANSI_DOS_DOT && Expression->Buffer[ExpressionPosition] != ANSI_DOS_QM &&
|
NamePosition < Name->Length)
|
||||||
Expression->Buffer[ExpressionPosition] != ANSI_DOS_STAR)
|
|
||||||
{
|
{
|
||||||
while (Name->Buffer[NamePosition] != Expression->Buffer[ExpressionPosition] &&
|
NamePosition++;
|
||||||
NamePosition < Name->Length)
|
|
||||||
{
|
|
||||||
NamePosition++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -34,6 +34,47 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression,
|
||||||
NamePosition++;
|
NamePosition++;
|
||||||
ExpressionPosition++;
|
ExpressionPosition++;
|
||||||
}
|
}
|
||||||
|
else if (StarFound != MAXUSHORT && (Expression->Buffer[StarFound + 1] == L'*' ||
|
||||||
|
Expression->Buffer[StarFound + 1] == L'?' || Expression->Buffer[StarFound + 1] == DOS_DOT))
|
||||||
|
{
|
||||||
|
ExpressionPosition = StarFound + 1;
|
||||||
|
switch (Expression->Buffer[ExpressionPosition])
|
||||||
|
{
|
||||||
|
case L'*':
|
||||||
|
StarFound = ExpressionPosition++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case L'?':
|
||||||
|
ExpressionPosition++;
|
||||||
|
MatchingChars = NamePosition;
|
||||||
|
while ((IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] :
|
||||||
|
Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition] &&
|
||||||
|
NamePosition < Name->Length / sizeof(WCHAR))
|
||||||
|
{
|
||||||
|
NamePosition++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NamePosition - MatchingChars > 0)
|
||||||
|
{
|
||||||
|
StarFound = MAXUSHORT;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DOS_DOT:
|
||||||
|
while (Name->Buffer[NamePosition] != L'.' &&
|
||||||
|
NamePosition < Name->Length / sizeof(WCHAR))
|
||||||
|
{
|
||||||
|
NamePosition++;
|
||||||
|
}
|
||||||
|
ExpressionPosition++;
|
||||||
|
StarFound = MAXUSHORT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
/* Should never happen */
|
||||||
|
ASSERT(FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (Expression->Buffer[ExpressionPosition] == L'?' || (Expression->Buffer[ExpressionPosition] == DOS_QM) ||
|
else if (Expression->Buffer[ExpressionPosition] == L'?' || (Expression->Buffer[ExpressionPosition] == DOS_QM) ||
|
||||||
(Expression->Buffer[ExpressionPosition] == DOS_DOT && Name->Buffer[NamePosition] == L'.'))
|
(Expression->Buffer[ExpressionPosition] == DOS_DOT && Name->Buffer[NamePosition] == L'.'))
|
||||||
{
|
{
|
||||||
|
@ -66,15 +107,11 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression,
|
||||||
else if (StarFound != MAXUSHORT)
|
else if (StarFound != MAXUSHORT)
|
||||||
{
|
{
|
||||||
ExpressionPosition = StarFound + 1;
|
ExpressionPosition = StarFound + 1;
|
||||||
if (Expression->Buffer[ExpressionPosition] != L'*' && Expression->Buffer[ExpressionPosition] != L'?' &&
|
while ((IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] :
|
||||||
Expression->Buffer[ExpressionPosition] != DOS_DOT && Expression->Buffer[ExpressionPosition] != DOS_QM &&
|
Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition] &&
|
||||||
Expression->Buffer[ExpressionPosition] != DOS_STAR)
|
NamePosition < Name->Length / sizeof(WCHAR))
|
||||||
{
|
{
|
||||||
while ((IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] : Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition] &&
|
NamePosition++;
|
||||||
NamePosition < Name->Length / sizeof(WCHAR))
|
|
||||||
{
|
|
||||||
NamePosition++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in a new issue