Author: tkreuzer
Date: Sat Feb 16 18:46:36 2013
New Revision: 58324
URL:
http://svn.reactos.org/svn/reactos?rev=58324&view=rev
Log:
[RTL]
Fix RtlIsNameLegalDOS8Dot3 regression
Modified:
trunk/reactos/lib/rtl/dos8dot3.c
Modified: trunk/reactos/lib/rtl/dos8dot3.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/dos8dot3.c?rev=583…
==============================================================================
--- trunk/reactos/lib/rtl/dos8dot3.c [iso-8859-1] (original)
+++ trunk/reactos/lib/rtl/dos8dot3.c [iso-8859-1] Sat Feb 16 18:46:36 2013
@@ -225,12 +225,18 @@
/*
* @implemented
+ * Note: the function does not conform to the annotations.
+ * SpacesFound is not always set!
*/
+_IRQL_requires_max_(PASSIVE_LEVEL)
+_Must_inspect_result_
+NTSYSAPI
BOOLEAN
NTAPI
-RtlIsNameLegalDOS8Dot3(IN PCUNICODE_STRING UnicodeName,
- IN OUT POEM_STRING AnsiName OPTIONAL,
- IN OUT PBOOLEAN SpacesFound OPTIONAL)
+RtlIsNameLegalDOS8Dot3 (
+ _In_ PCUNICODE_STRING Name,
+ _Inout_opt_ POEM_STRING OemName,
+ _Out_opt_ PBOOLEAN NameContainsSpaces)
{
static const char Illegal[] = "*?<>|\"+=,;[]:/\\\345";
int Dot = -1;
@@ -240,36 +246,35 @@
BOOLEAN GotSpace = FALSE;
NTSTATUS Status;
- if (SpacesFound) *SpacesFound = FALSE;
-
- if (!AnsiName)
+ if (!OemName)
{
OemString.Length = sizeof(Buffer);
OemString.MaximumLength = sizeof(Buffer);
OemString.Buffer = Buffer;
- AnsiName = &OemString;
- }
-
- Status = RtlUpcaseUnicodeStringToCountedOemString(AnsiName, UnicodeName, FALSE);
+ OemName = &OemString;
+ }
+
+ Status = RtlUpcaseUnicodeStringToCountedOemString(OemName, Name, FALSE);
if (!NT_SUCCESS(Status))
return FALSE;
- if ((AnsiName->Length > 12) || (AnsiName->Buffer == NULL)) return FALSE;
+ if ((OemName->Length > 12) || (OemName->Buffer == NULL)) return FALSE;
/* a starting . is invalid, except for . and .. */
- if (AnsiName->Buffer[0] == '.')
- {
- if (AnsiName->Length != 1 && (AnsiName->Length != 2 ||
AnsiName->Buffer[1] != '.')) return FALSE;
+ if (OemName->Buffer[0] == '.')
+ {
+ if (OemName->Length != 1 && (OemName->Length != 2 ||
OemName->Buffer[1] != '.')) return FALSE;
+ if (NameContainsSpaces) *NameContainsSpaces = FALSE;
return TRUE;
}
- for (i = 0; i < AnsiName->Length; i++)
- {
- switch (AnsiName->Buffer[i])
+ for (i = 0; i < OemName->Length; i++)
+ {
+ switch (OemName->Buffer[i])
{
case ' ':
/* leading/trailing spaces not allowed */
- if (!i || i == AnsiName->Length-1 || AnsiName->Buffer[i+1] ==
'.') return FALSE;
+ if (!i || i == OemName->Length-1 || OemName->Buffer[i+1] ==
'.') return FALSE;
GotSpace = TRUE;
break;
case '.':
@@ -277,7 +282,7 @@
Dot = i;
break;
default:
- if (strchr(Illegal, AnsiName->Buffer[i])) return FALSE;
+ if (strchr(Illegal, OemName->Buffer[i])) return FALSE;
break;
}
}
@@ -286,13 +291,13 @@
*/
if (Dot == -1)
{
- if (AnsiName->Length > 8) return FALSE;
+ if (OemName->Length > 8) return FALSE;
}
else
{
- if (Dot > 8 || (AnsiName->Length - Dot > 4) || Dot ==
AnsiName->Length - 1) return FALSE;
- }
- if (SpacesFound) *SpacesFound = GotSpace;
+ if (Dot > 8 || (OemName->Length - Dot > 4) || Dot == OemName->Length
- 1) return FALSE;
+ }
+ if (NameContainsSpaces) *NameContainsSpaces = GotSpace;
return TRUE;
}