From: Eric Pouech epouech@codeweavers.com
Signed-off-by: Eric Pouech epouech@codeweavers.com --- programs/cmd/builtins.c | 17 ++++++++++------- programs/cmd/tests/test_builtins.cmd.exp | 8 ++++---- programs/cmd/wcmd.h | 2 +- programs/cmd/wcmdmain.c | 2 +- 4 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index 7a023ba917c..7b4bc3b61bb 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -2414,8 +2414,9 @@ void WCMD_endlocal (void) { * Set/Show the current default directory */
-void WCMD_setshow_default (const WCHAR *args) { - +RETURN_CODE WCMD_setshow_default(const WCHAR *args) +{ + RETURN_CODE return_code; BOOL status; WCHAR string[1024]; WCHAR cwd[1024]; @@ -2436,6 +2437,7 @@ void WCMD_setshow_default (const WCHAR *args) { }
GetCurrentDirectoryW(ARRAY_SIZE(cwd), cwd); + return_code = NO_ERROR;
if (!*args) { lstrcatW(cwd, L"\r\n"); @@ -2466,7 +2468,9 @@ void WCMD_setshow_default (const WCHAR *args) { WCHAR ext[MAX_PATH];
/* Convert path into actual directory spec */ - if (!WCMD_get_fullpath(string, ARRAY_SIZE(fpath), fpath, NULL)) return; + if (!WCMD_get_fullpath(string, ARRAY_SIZE(fpath), fpath, NULL)) + return errorlevel = ERROR_INVALID_FUNCTION; + _wsplitpath(fpath, drive, dir, fname, ext);
/* Rebuild path */ @@ -2482,9 +2486,8 @@ void WCMD_setshow_default (const WCHAR *args) {
status = SetCurrentDirectoryW(string); if (!status) { - errorlevel = ERROR_INVALID_FUNCTION; WCMD_print_error (); - return; + return_code = ERROR_INVALID_FUNCTION; } else {
/* Save away the actual new directory, to store as current location */ @@ -2511,8 +2514,8 @@ void WCMD_setshow_default (const WCHAR *args) { SetEnvironmentVariableW(env, string); }
- } - return; + } + return errorlevel = return_code; }
/**************************************************************************** diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp index ef93def2732..0397311cf85 100644 --- a/programs/cmd/tests/test_builtins.cmd.exp +++ b/programs/cmd/tests/test_builtins.cmd.exp @@ -503,10 +503,10 @@ FAILURE 1 FAILURE 1 SUCCESS 0 --- success/failure for CD command -@todo_wine@SUCCESS 0 -@todo_wine@FAILURE 1 -@todo_wine@SUCCESS 0 -@todo_wine@SUCCESS 0 +SUCCESS 0 +FAILURE 1 +SUCCESS 0 +SUCCESS 0 --- success/failure for PUSHD/POPD commands @todo_wine@SUCCESS 0 SUCCESS 0 diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h index 8fe2eb3f322..f538d3069bb 100644 --- a/programs/cmd/wcmd.h +++ b/programs/cmd/wcmd.h @@ -194,7 +194,7 @@ RETURN_CODE WCMD_rename(void); void WCMD_run_program (WCHAR *command, BOOL called); void WCMD_setlocal (const WCHAR *args); void WCMD_setshow_date (void); -void WCMD_setshow_default (const WCHAR *args); +RETURN_CODE WCMD_setshow_default(const WCHAR *args); void WCMD_setshow_env (WCHAR *command); void WCMD_setshow_path (const WCHAR *args); void WCMD_setshow_prompt (void); diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index ededdcd2177..2228593157e 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -1814,7 +1814,7 @@ static RETURN_CODE execute_single_command(const WCHAR *command) break; case WCMD_CD: case WCMD_CHDIR: - WCMD_setshow_default (parms_start); + return_code = WCMD_setshow_default(parms_start); break; case WCMD_CLS: WCMD_clear_screen ();