ntdll: Check for existing Unix path name in RtlGetFullPathName_U().
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
0d173e5710
commit
45bfa4eec3
|
@ -543,16 +543,18 @@ static ULONG get_full_path_helper(LPCWSTR name, LPWSTR buffer, ULONG size)
|
|||
WCHAR *nt_str;
|
||||
SIZE_T buflen;
|
||||
NTSTATUS status;
|
||||
UNICODE_STRING str;
|
||||
|
||||
unix_name = RtlAllocateHeap( GetProcessHeap(), 0, 3 * wcslen(name) + 1 );
|
||||
ntdll_wcstoumbs( name, wcslen(name) + 1, unix_name, 3 * wcslen(name) + 1, FALSE );
|
||||
buflen = strlen(unix_name) + 10;
|
||||
for (;;)
|
||||
nt_str = RtlAllocateHeap( GetProcessHeap(), 0, (wcslen(name) + 9) * sizeof(WCHAR) );
|
||||
wcscpy( nt_str, L"\\??\\unix" );
|
||||
wcscat( nt_str, name );
|
||||
RtlInitUnicodeString( &str, nt_str );
|
||||
buflen = 3 * wcslen(name) + 1;
|
||||
unix_name = RtlAllocateHeap( GetProcessHeap(), 0, buflen );
|
||||
if (!(status = wine_nt_to_unix_file_name( &str, unix_name, &buflen, FILE_OPEN )))
|
||||
{
|
||||
if (!(nt_str = RtlAllocateHeap( GetProcessHeap(), 0, buflen * sizeof(WCHAR) ))) break;
|
||||
buflen = wcslen(name) + 9;
|
||||
status = wine_unix_to_nt_file_name( unix_name, nt_str, &buflen );
|
||||
if (status != STATUS_BUFFER_TOO_SMALL) break;
|
||||
RtlFreeHeap( GetProcessHeap(), 0, nt_str );
|
||||
}
|
||||
RtlFreeHeap( GetProcessHeap(), 0, unix_name );
|
||||
if (!status && buflen > 6 && nt_str[5] == ':')
|
||||
|
|
Loading…
Reference in New Issue