mirror of
https://github.com/reactos/reactos.git
synced 2024-10-03 16:05:37 +00:00
[NTOSKRNL]
Merge some changes from r50021 to FsRtlIsNameInExpression() to make code easier to read and understand... svn path=/trunk/; revision=50022
This commit is contained in:
parent
435cdd8c49
commit
fd45340e00
|
@ -22,63 +22,63 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression,
|
||||||
IN BOOLEAN IgnoreCase,
|
IN BOOLEAN IgnoreCase,
|
||||||
IN PWCHAR UpcaseTable OPTIONAL)
|
IN PWCHAR UpcaseTable OPTIONAL)
|
||||||
{
|
{
|
||||||
ULONG i = 0, j, k = 0;
|
USHORT ExpressionPosition = 0, NamePosition = 0, MatchingChars;
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
ASSERT(!IgnoreCase || UpcaseTable);
|
ASSERT(!IgnoreCase || UpcaseTable);
|
||||||
|
|
||||||
while (i < Name->Length / sizeof(WCHAR) && k < Expression->Length / sizeof(WCHAR))
|
while (NamePosition < Name->Length / sizeof(WCHAR) && ExpressionPosition < Expression->Length / sizeof(WCHAR))
|
||||||
{
|
{
|
||||||
if ((Expression->Buffer[k] == (IgnoreCase ? UpcaseTable[Name->Buffer[i]] : Name->Buffer[i])) ||
|
if ((Expression->Buffer[ExpressionPosition] == (IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] : Name->Buffer[NamePosition])) ||
|
||||||
(Expression->Buffer[k] == L'?') || (Expression->Buffer[k] == DOS_QM) ||
|
(Expression->Buffer[ExpressionPosition] == L'?') || (Expression->Buffer[ExpressionPosition] == DOS_QM) ||
|
||||||
(Expression->Buffer[k] == DOS_DOT && Name->Buffer[i] == L'.'))
|
(Expression->Buffer[ExpressionPosition] == DOS_DOT && Name->Buffer[NamePosition] == L'.'))
|
||||||
{
|
{
|
||||||
i++;
|
NamePosition++;
|
||||||
k++;
|
ExpressionPosition++;
|
||||||
}
|
}
|
||||||
else if (Expression->Buffer[k] == L'*')
|
else if (Expression->Buffer[ExpressionPosition] == L'*')
|
||||||
{
|
{
|
||||||
if (k < (Expression->Length / sizeof(WCHAR) - 1))
|
if (ExpressionPosition < (Expression->Length / sizeof(WCHAR) - 1))
|
||||||
{
|
{
|
||||||
if (Expression->Buffer[k+1] != L'*' && Expression->Buffer[k+1] != L'?' &&
|
if (Expression->Buffer[ExpressionPosition+1] != L'*' && Expression->Buffer[ExpressionPosition+1] != L'?' &&
|
||||||
Expression->Buffer[k+1] != DOS_DOT && Expression->Buffer[k+1] != DOS_QM &&
|
Expression->Buffer[ExpressionPosition+1] != DOS_DOT && Expression->Buffer[ExpressionPosition+1] != DOS_QM &&
|
||||||
Expression->Buffer[k+1] != DOS_STAR)
|
Expression->Buffer[ExpressionPosition+1] != DOS_STAR)
|
||||||
{
|
{
|
||||||
while ((IgnoreCase ? UpcaseTable[Name->Buffer[i]] : Name->Buffer[i]) != Expression->Buffer[k+1] &&
|
while ((IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] : Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition+1] &&
|
||||||
i < Name->Length / sizeof(WCHAR)) i++;
|
NamePosition < Name->Length / sizeof(WCHAR)) NamePosition++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
i = Name->Length / sizeof(WCHAR);
|
NamePosition = Name->Length / sizeof(WCHAR);
|
||||||
}
|
}
|
||||||
k++;
|
ExpressionPosition++;
|
||||||
}
|
}
|
||||||
else if (Expression->Buffer[k] == DOS_STAR)
|
else if (Expression->Buffer[ExpressionPosition] == DOS_STAR)
|
||||||
{
|
{
|
||||||
j = i;
|
MatchingChars = NamePosition;
|
||||||
while (j < Name->Length / sizeof(WCHAR))
|
while (MatchingChars < Name->Length / sizeof(WCHAR))
|
||||||
{
|
{
|
||||||
if (Name->Buffer[j] == L'.')
|
if (Name->Buffer[MatchingChars] == L'.')
|
||||||
{
|
{
|
||||||
i = j;
|
NamePosition = MatchingChars;
|
||||||
}
|
}
|
||||||
j++;
|
MatchingChars++;
|
||||||
}
|
}
|
||||||
k++;
|
ExpressionPosition++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
i = Name->Length / sizeof(WCHAR);
|
NamePosition = Name->Length / sizeof(WCHAR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (k + 1 == Expression->Length / sizeof(WCHAR) && i == Name->Length / sizeof(WCHAR) &&
|
if (ExpressionPosition + 1 == Expression->Length / sizeof(WCHAR) && NamePosition == Name->Length / sizeof(WCHAR) &&
|
||||||
Expression->Buffer[k] == DOS_DOT)
|
Expression->Buffer[ExpressionPosition] == DOS_DOT)
|
||||||
{
|
{
|
||||||
k++;
|
ExpressionPosition++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (k == Expression->Length / sizeof(WCHAR) && i == Name->Length / sizeof(WCHAR));
|
return (ExpressionPosition == Expression->Length / sizeof(WCHAR) && NamePosition == Name->Length / sizeof(WCHAR));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* PUBLIC FUNCTIONS **********************************************************/
|
/* PUBLIC FUNCTIONS **********************************************************/
|
||||||
|
|
Loading…
Reference in a new issue