Module: wine Branch: master Commit: 45bfa4eec3f52a00f4a92b1d533d5fe39edeec3b URL: https://source.winehq.org/git/wine.git/?a=commit;h=45bfa4eec3f52a00f4a92b1d5...
Author: Alexandre Julliard julliard@winehq.org Date: Sun Feb 28 11:29:17 2021 +0100
ntdll: Check for existing Unix path name in RtlGetFullPathName_U().
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntdll/path.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/dlls/ntdll/path.c b/dlls/ntdll/path.c index 86760f178e1..9d707d883b2 100644 --- a/dlls/ntdll/path.c +++ b/dlls/ntdll/path.c @@ -543,16 +543,18 @@ static ULONG get_full_path_helper(LPCWSTR name, LPWSTR buffer, ULONG size) WCHAR *nt_str; SIZE_T buflen; NTSTATUS status; - - 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 (;;) + UNICODE_STRING str; + + 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] == ':')