Alexandre Julliard : ntdll: Keep a valid DOS name if the initial current directory is a Unix dir.

Alexandre Julliard julliard at winehq.org
Thu Nov 28 16:02:21 CST 2019


Module: wine
Branch: master
Commit: f2060812418bc049105c2a30ceb039ee6d5f0fd7
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=f2060812418bc049105c2a30ceb039ee6d5f0fd7

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Nov 28 19:16:56 2019 +0100

ntdll: Keep a valid DOS name if the initial current directory is a Unix dir.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48114
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntdll/env.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/dlls/ntdll/env.c b/dlls/ntdll/env.c
index 79a1805618..ebeda01ff8 100644
--- a/dlls/ntdll/env.c
+++ b/dlls/ntdll/env.c
@@ -622,8 +622,17 @@ static void get_current_directory( UNICODE_STRING *dir )
         if (!wine_unix_to_nt_file_name( &unix_name, &nt_name ))
         {
             /* skip the \??\ prefix */
-            dir->Length = nt_name.Length - 4 * sizeof(WCHAR);
-            memcpy( dir->Buffer, nt_name.Buffer + 4, dir->Length );
+            if (nt_name.Length > 6 * sizeof(WCHAR*) && nt_name.Buffer[5] == ':')
+            {
+                dir->Length = nt_name.Length - 4 * sizeof(WCHAR);
+                memcpy( dir->Buffer, nt_name.Buffer + 4, dir->Length );
+            }
+            else  /* change \??\ to \\?\ */
+            {
+                dir->Length = nt_name.Length;
+                memcpy( dir->Buffer, nt_name.Buffer, dir->Length );
+                dir->Buffer[1] = '\\';
+            }
             RtlFreeUnicodeString( &nt_name );
         }
     }




More information about the wine-cvs mailing list