https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f43ee81573273dde924f6…
commit f43ee81573273dde924f6cbbcad5e7e424e8f27c
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Sun Jul 12 16:23:01 2020 +0200
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Wed Aug 19 20:36:08 2020 +0200
[CMD] CHDIR: Adjust ERROR_FILE_NOT_FOUND into ERROR_PATH_NOT_FOUND if _tchdir()
fails.
---
base/shell/cmd/internal.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/base/shell/cmd/internal.c b/base/shell/cmd/internal.c
index 3f2c1b6b233..0dc3eaba2bd 100644
--- a/base/shell/cmd/internal.c
+++ b/base/shell/cmd/internal.c
@@ -184,6 +184,7 @@ GetRootPath(
BOOL SetRootPath(TCHAR *oldpath, TCHAR *InPath)
{
+ DWORD dwLastError;
TCHAR OutPath[MAX_PATH];
TCHAR OutPathTemp[MAX_PATH];
@@ -191,7 +192,10 @@ BOOL SetRootPath(TCHAR *oldpath, TCHAR *InPath)
/* Retrieve the full path name from the (possibly relative) InPath */
if (GetFullPathName(InPath, ARRAYSIZE(OutPathTemp), OutPathTemp, NULL) == 0)
+ {
+ dwLastError = GetLastError();
goto Fail;
+ }
/* Convert the full path to its correct case.
* Example: c:\windows\SYSTEM32 => C:\WINDOWS\System32 */
@@ -200,7 +204,12 @@ BOOL SetRootPath(TCHAR *oldpath, TCHAR *InPath)
/* Use _tchdir(), since unlike SetCurrentDirectory() it updates
* the current-directory-on-drive environment variables. */
if (_tchdir(OutPath) != 0)
+ {
+ dwLastError = GetLastError();
+ if (dwLastError == ERROR_FILE_NOT_FOUND)
+ dwLastError = ERROR_PATH_NOT_FOUND;
goto Fail;
+ }
/* Keep the original drive in ordinary CD/CHDIR (without /D switch) */
if (oldpath != NULL && _tcsncicmp(OutPath, oldpath, 2) != 0)
@@ -209,7 +218,7 @@ BOOL SetRootPath(TCHAR *oldpath, TCHAR *InPath)
return TRUE;
Fail:
- ConErrFormatMessage(GetLastError());
+ ConErrFormatMessage(dwLastError);
nErrorLevel = 1;
return FALSE;
}