[PATCH] ntdll: Properly set the current directory for UNC paths
Most of the other code deals with UNC paths of the form \\server\share in the current directory, which is proper, but the current directory is wrongfully set to the form UNC\server\share, so fix it. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=37834 Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com> --- dlls/ntdll/path.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/dlls/ntdll/path.c b/dlls/ntdll/path.c index ccc95e3..6291f9d 100644 --- a/dlls/ntdll/path.c +++ b/dlls/ntdll/path.c @@ -1039,12 +1039,22 @@ NTSTATUS WINAPI RtlSetCurrentDirectory_U(const UNICODE_STRING* dir) if (curdir->Handle) NtClose( curdir->Handle ); curdir->Handle = handle; - /* append trailing \ if missing */ size = newdir.Length / sizeof(WCHAR); ptr = newdir.Buffer; ptr += 4; /* skip \??\ prefix */ size -= 4; - if (size && ptr[size - 1] != '\\') ptr[size++] = '\\'; + if (size) + { + /* append trailing \ if missing */ + if (ptr[size - 1] != '\\') ptr[size++] = '\\'; + + /* convert \??\UNC\ path to \\ prefix */ + if (size >= 4 && !strncmpiW(ptr, UncPfxW, 4)) + { + ptr += 4-2; size -= 4-2; + *ptr = '\\'; + } + } memcpy( curdir->DosPath.Buffer, ptr, size * sizeof(WCHAR)); curdir->DosPath.Buffer[size] = 0; -- 1.9.1
participants (1)
-
Gabriel Ivăncescu