mirror of
https://github.com/reactos/reactos.git
synced 2024-10-01 15:07:53 +00:00
[NTOSKRNL]
Properly handle (as Windows does) WC in case last dot was eaten in path name translation Fixes last FindFile failing tests svn path=/trunk/; revision=58833
This commit is contained in:
parent
4517988f68
commit
dc93e99c9f
|
@ -669,7 +669,7 @@ FindFirstFileExW(IN LPCWSTR lpFileName,
|
||||||
PFIND_DATA_HANDLE FindDataHandle;
|
PFIND_DATA_HANDLE FindDataHandle;
|
||||||
PFIND_FILE_DATA FindFileData;
|
PFIND_FILE_DATA FindFileData;
|
||||||
|
|
||||||
UNICODE_STRING NtPath, FilePattern;
|
UNICODE_STRING NtPath, FilePattern, FileName;
|
||||||
PWSTR NtPathBuffer;
|
PWSTR NtPathBuffer;
|
||||||
RTL_RELATIVE_NAME_U RelativePath;
|
RTL_RELATIVE_NAME_U RelativePath;
|
||||||
ULONG DeviceNameInfo = 0;
|
ULONG DeviceNameInfo = 0;
|
||||||
|
@ -679,6 +679,8 @@ FindFirstFileExW(IN LPCWSTR lpFileName,
|
||||||
IO_STATUS_BLOCK IoStatusBlock;
|
IO_STATUS_BLOCK IoStatusBlock;
|
||||||
HANDLE hDirectory = NULL;
|
HANDLE hDirectory = NULL;
|
||||||
|
|
||||||
|
BOOLEAN HadADot = FALSE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* May represent many FILE_BOTH_DIR_INFORMATION
|
* May represent many FILE_BOTH_DIR_INFORMATION
|
||||||
* or many FILE_FULL_DIR_INFORMATION structures.
|
* or many FILE_FULL_DIR_INFORMATION structures.
|
||||||
|
@ -693,6 +695,12 @@ FindFirstFileExW(IN LPCWSTR lpFileName,
|
||||||
return INVALID_HANDLE_VALUE;
|
return INVALID_HANDLE_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RtlInitUnicodeString(&FileName, lpFileName);
|
||||||
|
if (FileName.Length != 0 && FileName.Buffer[FileName.Length / sizeof(WCHAR) - 1] == L'.')
|
||||||
|
{
|
||||||
|
HadADot = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
if (!RtlDosPathNameToNtPathName_U(lpFileName,
|
if (!RtlDosPathNameToNtPathName_U(lpFileName,
|
||||||
&NtPath,
|
&NtPath,
|
||||||
(PCWSTR*)&FilePattern.Buffer,
|
(PCWSTR*)&FilePattern.Buffer,
|
||||||
|
@ -856,6 +864,15 @@ FindFirstFileExW(IN LPCWSTR lpFileName,
|
||||||
|
|
||||||
PatternIndex++;
|
PatternIndex++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Handle partial wc if our last dot was eaten */
|
||||||
|
if (HadADot)
|
||||||
|
{
|
||||||
|
if (FilePattern.Buffer[FilePattern.Length / sizeof(WCHAR) - 1] == L'*')
|
||||||
|
{
|
||||||
|
FilePattern.Buffer[FilePattern.Length / sizeof(WCHAR) - 1] = L'<';
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = NtQueryDirectoryFile(hDirectory,
|
Status = NtQueryDirectoryFile(hDirectory,
|
||||||
|
|
Loading…
Reference in a new issue