mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 00:45:24 +00:00
Pierre Schweitzer
- Implemented CdfsIsNameLegalDOS8Dot3 and use it to check filenames. It avoids calling Rtl* functions that need NLS. (Modified merge of 35501). See issue #2404 for more details. svn path=/trunk/; revision=48486
This commit is contained in:
parent
7dc11f26bf
commit
1dac3daaa1
1 changed files with 35 additions and 3 deletions
|
@ -95,6 +95,40 @@ CdfsFileFlagsToAttributes(PFCB Fcb,
|
|||
((Fcb->Entry.FileFlags & FILE_FLAG_READONLY) ? FILE_ATTRIBUTE_READONLY : 0);
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
CdfsIsNameLegalDOS8Dot3(IN PUNICODE_STRING FileName
|
||||
)
|
||||
{
|
||||
ULONG i;
|
||||
STRING DbcsName;
|
||||
CHAR DbcsNameBuffer[12];
|
||||
|
||||
for (i = 0; i < FileName->Length / sizeof(WCHAR) ; i++)
|
||||
{
|
||||
/* Don't allow spaces in FileName */
|
||||
if (FileName->Buffer[i] == L' ')
|
||||
return FALSE;
|
||||
}
|
||||
#if 0
|
||||
/* If FileName is finishing with a dot, remove it */
|
||||
if (FileName->Buffer[FileName->Length / sizeof(WCHAR) - 1] == '.')
|
||||
{
|
||||
FileName->Length -= sizeof(WCHAR);
|
||||
}
|
||||
#endif
|
||||
/* Finally, convert the string to call the FsRtl function */
|
||||
DbcsName.MaximumLength = 12;
|
||||
DbcsName.Buffer = DbcsNameBuffer;
|
||||
if (!NT_SUCCESS(RtlUnicodeStringToCountedOemString(&DbcsName,
|
||||
FileName,
|
||||
FALSE )))
|
||||
{
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
return FsRtlIsFatDbcsLegal(DbcsName, FALSE, FALSE, FALSE);
|
||||
}
|
||||
|
||||
VOID
|
||||
CdfsShortNameCacheGet
|
||||
(PFCB DirectoryFcb,
|
||||
|
@ -102,7 +136,6 @@ CdfsShortNameCacheGet
|
|||
PUNICODE_STRING LongName,
|
||||
PUNICODE_STRING ShortName)
|
||||
{
|
||||
BOOLEAN HasSpaces;
|
||||
PLIST_ENTRY Entry;
|
||||
PCDFS_SHORT_NAME ShortNameEntry;
|
||||
GENERATE_NAME_CONTEXT Context = { 0 };
|
||||
|
@ -132,8 +165,7 @@ CdfsShortNameCacheGet
|
|||
}
|
||||
|
||||
/* Cache miss */
|
||||
if ((RtlIsNameLegalDOS8Dot3(LongName, NULL, &HasSpaces) == FALSE) ||
|
||||
(HasSpaces == TRUE))
|
||||
if (!CdfsIsNameLegalDOS8Dot3(LongName))
|
||||
{
|
||||
RtlGenerate8dot3Name(LongName, FALSE, &Context, ShortName);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue