[ros-diffs] [pschweitzer] 36539: Get rid off recursive FsRtlIsNameInExpression once again. Fix a typo in iterative function that fixes it properly. We now get ReactOS up to 2nd stage with that fix. 2nd stage is broken...
pschweitzer at svn.reactos.org
pschweitzer at svn.reactos.org
Fri Sep 26 22:05:01 CEST 2008
Author: pschweitzer
Date: Fri Sep 26 14:50:39 2008
New Revision: 36539
URL: http://svn.reactos.org/svn/reactos?rev=36539&view=rev
Log:
Get rid off recursive FsRtlIsNameInExpression once again.
Fix a typo in iterative function that fixes it properly. We now get ReactOS up to 2nd stage with that fix. 2nd stage is broken...
Modified:
branches/pierre-fsd/ntoskrnl/fsrtl/name.c
Modified: branches/pierre-fsd/ntoskrnl/fsrtl/name.c
URL: http://svn.reactos.org/svn/reactos/branches/pierre-fsd/ntoskrnl/fsrtl/name.c?rev=36539&r1=36538&r2=36539&view=diff
==============================================================================
--- branches/pierre-fsd/ntoskrnl/fsrtl/name.c [iso-8859-1] (original)
+++ branches/pierre-fsd/ntoskrnl/fsrtl/name.c [iso-8859-1] Fri Sep 26 14:50:39 2008
@@ -268,8 +268,7 @@
* rewritten to avoid recursion and better wildcard handling
* should be implemented (see FsRtlDoesNameContainWildCards).
*
- *--*/
-#if 0
+ *--*/
BOOLEAN
NTAPI
FsRtlIsNameInExpression(IN PUNICODE_STRING Expression,
@@ -309,103 +308,11 @@
{
k = 0;
}
- if (k == Name->Length / sizeof(WCHAR))
+ if (k == Expression->Length / sizeof(WCHAR))
{
return TRUE;
}
}
return FALSE;
-}
-#endif
-BOOLEAN
-NTAPI
-FsRtlIsNameInExpression(IN PUNICODE_STRING Expression,
- IN PUNICODE_STRING Name,
- IN BOOLEAN IgnoreCase,
- IN PWCHAR UpcaseTable OPTIONAL)
-{
- USHORT ExpressionPosition, NamePosition;
- UNICODE_STRING TempExpression, TempName;
-
- ExpressionPosition = 0;
- NamePosition = 0;
- while (ExpressionPosition < (Expression->Length / sizeof(WCHAR)) &&
- NamePosition < (Name->Length / sizeof(WCHAR)))
- {
- if (Expression->Buffer[ExpressionPosition] == L'*')
- {
- ExpressionPosition++;
- if (ExpressionPosition == (Expression->Length / sizeof(WCHAR)))
- {
- return TRUE;
- }
- while (NamePosition < (Name->Length / sizeof(WCHAR)))
- {
- TempExpression.Length =
- TempExpression.MaximumLength =
- Expression->Length - (ExpressionPosition * sizeof(WCHAR));
- TempExpression.Buffer = Expression->Buffer + ExpressionPosition;
- TempName.Length =
- TempName.MaximumLength =
- Name->Length - (NamePosition * sizeof(WCHAR));
- TempName.Buffer = Name->Buffer + NamePosition;
- /* FIXME: Rewrite to get rid of recursion */
- if (FsRtlIsNameInExpression(&TempExpression, &TempName,
- IgnoreCase, UpcaseTable))
- {
- return TRUE;
- }
- NamePosition++;
- }
- }
- else
- {
- if (Expression->Buffer[ExpressionPosition] == L'?' || (
- IgnoreCase && !UpcaseTable &&
- RtlUpcaseUnicodeChar(Expression->Buffer[ExpressionPosition]) ==
- RtlUpcaseUnicodeChar(Name->Buffer[NamePosition])) ||
- (!IgnoreCase && Expression->Buffer[ExpressionPosition] ==
- Name->Buffer[NamePosition]))
- {
- NamePosition++;
-
- ExpressionPosition++;
- }
- else if (IgnoreCase && UpcaseTable)
- {
- if (UpcaseTable[Expression->Buffer[ExpressionPosition]] ==
- UpcaseTable[Name->Buffer[NamePosition]])
- {
- NamePosition++;
- ExpressionPosition++;
- }
- }
- else
- {
- return FALSE;
- }
- }
- }
-
- /* Handle matching of "f0_*.*" expression to "f0_000" file name. */
- if (ExpressionPosition < (Expression->Length / sizeof(WCHAR)) &&
- Expression->Buffer[ExpressionPosition] == L'.')
- {
- while (ExpressionPosition < (Expression->Length / sizeof(WCHAR)) &&
- (Expression->Buffer[ExpressionPosition] == L'.' ||
- Expression->Buffer[ExpressionPosition] == L'*' ||
- Expression->Buffer[ExpressionPosition] == L'?'))
- {
- ExpressionPosition++;
- }
- }
-
- if (ExpressionPosition == (Expression->Length / sizeof(WCHAR)) &&
- NamePosition == (Name->Length / sizeof(WCHAR)))
- {
- return TRUE;
- }
-
- return FALSE;
}
More information about the Ros-diffs
mailing list