From cf3655bed10430a30a92859bf632ad2389cc078e Mon Sep 17 00:00:00 2001 From: RadWolfie Date: Sun, 25 Apr 2021 16:53:43 -0500 Subject: [PATCH] fix g_hCurDir issue by auto-bind to D letter when symbolic link is called occur --- src/core/kernel/init/CxbxKrnl.cpp | 3 --- src/core/kernel/support/EmuFile.cpp | 9 ++++++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/core/kernel/init/CxbxKrnl.cpp b/src/core/kernel/init/CxbxKrnl.cpp index 382437d4b..d412cd806 100644 --- a/src/core/kernel/init/CxbxKrnl.cpp +++ b/src/core/kernel/init/CxbxKrnl.cpp @@ -1448,9 +1448,6 @@ __declspec(noreturn) void CxbxKrnlInit if (CxbxTitleDeviceDriveIndex == -1 || lastFind != std::string::npos) { #endif CxbxCreateSymbolicLink(DriveD, relative_path); - // Arrange that the Xbe path can reside outside the partitions, and put it to g_hCurDir : - EmuNtSymbolicLinkObject* xbePathSymbolicLinkObject = FindNtSymbolicLinkObjectByDriveLetter(CxbxAutoMountDriveLetter); - g_hCurDir = xbePathSymbolicLinkObject->RootDirectoryHandle; } } diff --git a/src/core/kernel/support/EmuFile.cpp b/src/core/kernel/support/EmuFile.cpp index 358168265..caff3b2ec 100644 --- a/src/core/kernel/support/EmuFile.cpp +++ b/src/core/kernel/support/EmuFile.cpp @@ -715,8 +715,12 @@ xbox::ntstatus_xt CxbxCreateSymbolicLink(std::string SymbolicLinkName, std::stri SymbolicLinkObject = new EmuNtSymbolicLinkObject(); result = SymbolicLinkObject->Init(SymbolicLinkName, FullPath); - if (result != xbox::status_success) + if (result != xbox::status_success) { SymbolicLinkObject->NtClose(); + } + else if (SymbolicLinkObject->DriveLetter == CxbxAutoMountDriveLetter) { + g_hCurDir = SymbolicLinkObject->RootDirectoryHandle; + } return result; } @@ -807,6 +811,9 @@ NTSTATUS EmuNtSymbolicLinkObject::Init(std::string aSymbolicLinkName, std::strin if (DriveLetter >= 'A' && DriveLetter <= 'Z') { NtSymbolicLinkObjects[DriveLetter - 'A'] = NULL; NtDll::NtClose(RootDirectoryHandle); + if (DriveLetter == CxbxAutoMountDriveLetter) { + g_hCurDir = NULL; + } } }