Module: wine Branch: master Commit: 2b03d7d75f5d6ff29796cfc51e625faf5ab8a4cb URL: http://source.winehq.org/git/wine.git/?a=commit;h=2b03d7d75f5d6ff29796cfc51e...
Author: Jason Edmeades us@edmeades.me.uk Date: Thu Mar 8 00:47:45 2007 +0000
cmd.exe: Add support for working directories per drive.
---
programs/cmd/builtins.c | 11 +++++++++++ programs/cmd/wcmdmain.c | 11 +++++++++++ 2 files changed, 22 insertions(+), 0 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index 4c80289..f38cd97 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -1108,12 +1108,23 @@ void WCMD_setshow_default (char *command) {
/* Change to that directory */ WINE_TRACE("Really changing to directory '%s'\n", string); + status = SetCurrentDirectory (string); if (!status) { errorlevel = 1; WCMD_print_error (); return; } + + /* Set special =C: type environment variable */ + if ((string[1] == ':') && IsCharAlpha (string[0])) { + char env[4]; + strcpy(env, "="); + strncpy(env+1, string, 2); + env[3] = 0x00; + SetEnvironmentVariable(env, string); + } + } return; } diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index 1a093fa..de6aa6d 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -460,6 +460,17 @@ void WCMD_process_command (char *command) */
if ((cmd[1] == ':') && IsCharAlpha (cmd[0]) && (strlen(cmd) == 2)) { + char envvar[5]; + char dir[MAX_PATH]; + + /* According to MSDN CreateProcess docs, special env vars record + the current directory on each drive, in the form =C: + so see if one specified, and if so go back to it */ + strcpy(envvar, "="); + strcat(envvar, cmd); + if (GetEnvironmentVariable(envvar, dir, MAX_PATH) == 0) { + sprintf(cmd, "%s\", cmd); + } status = SetCurrentDirectory (cmd); if (!status) WCMD_print_error (); HeapFree( GetProcessHeap(), 0, cmd );