[PATCH 3/3] cmd.exe: Support cd .. when saving current directory

Jason Edmeades jason.edmeades at googlemail.com
Mon Mar 3 17:14:30 CST 2008


If you used cd c:\windows or cd ..\windows everything worked fine
when you changed drive letter and came back again. However, cd ..
failed to correctly set the saved directory on the drive. This means
c: && cd .. && Z: && C: puts you in the directory one level up on
the C drive correctly.
---
 programs/cmd/builtins.c |    3 +++
 programs/cmd/wcmdmain.c |    3 +++
 2 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index 8592090..17b385d 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -1865,6 +1865,9 @@ void WCMD_setshow_default (WCHAR *command) {
       return;
     } else {
 
+      /* Save away the actual new directory, to store as current location */
+      GetCurrentDirectoryW (sizeof(string)/sizeof(WCHAR), string);
+
       /* Restore old directory if drive letter would change, and
            CD x:\directory /D (or pushd c:\directory) not supplied */
       if ((strstrW(quals, parmD) == NULL) &&
diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c
index 58e0373..d218209 100644
--- a/programs/cmd/wcmdmain.c
+++ b/programs/cmd/wcmdmain.c
@@ -419,6 +419,7 @@ int wmain (int argc, WCHAR *argvW[])
     static const WCHAR fmt[] = {'=','%','c',':','\0'};
     wsprintf(envvar, fmt, string[0]);
     SetEnvironmentVariable(envvar, string);
+    WINE_TRACE("Set %s to %s\n", wine_dbgstr_w(envvar), wine_dbgstr_w(string));
   }
 
   if (opt_k) {
@@ -643,7 +644,9 @@ void WCMD_execute (WCHAR *command, WCHAR *redirects,
       if (GetEnvironmentVariable(envvar, dir, MAX_PATH) == 0) {
         static const WCHAR fmt[] = {'%','s','\\','\0'};
         wsprintf(cmd, fmt, cmd);
+        WINE_TRACE("No special directory settings, using dir of %s\n", wine_dbgstr_w(cmd));
       }
+      WINE_TRACE("Got directory %s as %s\n", wine_dbgstr_w(envvar), wine_dbgstr_w(cmd));
       status = SetCurrentDirectory (cmd);
       if (!status) WCMD_print_error ();
       HeapFree( GetProcessHeap(), 0, cmd );
-- 
1.5.3.2




More information about the wine-patches mailing list