Module: wine Branch: master Commit: 44e8133f4f45848367ff35545554958ae4f5adc7 URL: https://gitlab.winehq.org/wine/wine/-/commit/44e8133f4f45848367ff35545554958... Author: Eric Pouech <epouech(a)codeweavers.com> Date: Sat Jun 29 13:04:28 2024 +0200 cmd: Set success/failure return code for PUSHD command. Signed-off-by: Eric Pouech <epouech(a)codeweavers.com> --- programs/cmd/builtins.c | 20 +++++++++++++------- programs/cmd/tests/test_builtins.cmd.exp | 8 ++++---- programs/cmd/wcmd.h | 2 +- programs/cmd/wcmdmain.c | 2 +- 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index 7b4bc3b61bb..6e0a7830900 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -1875,15 +1875,19 @@ RETURN_CODE WCMD_goto(void) * Push a directory onto the stack */ -void WCMD_pushd (const WCHAR *args) +RETURN_CODE WCMD_pushd(const WCHAR *args) { struct env_stack *curdir; WCHAR *thisdir; + RETURN_CODE return_code; + + if (!*args) + return errorlevel = NO_ERROR; if (wcschr(args, '/') != NULL) { SetLastError(ERROR_INVALID_PARAMETER); WCMD_print_error(); - return; + return errorlevel = ERROR_INVALID_FUNCTION; } curdir = LocalAlloc (LMEM_FIXED, sizeof (struct env_stack)); @@ -1892,18 +1896,19 @@ void WCMD_pushd (const WCHAR *args) LocalFree(curdir); LocalFree(thisdir); WINE_ERR ("out of memory\n"); - return; + return errorlevel = ERROR_INVALID_FUNCTION; } /* Change directory using CD code with /D parameter */ lstrcpyW(quals, L"/D"); GetCurrentDirectoryW (1024, thisdir); - errorlevel = NO_ERROR; - WCMD_setshow_default(args); - if (errorlevel) { + + return_code = WCMD_setshow_default(args); + if (return_code != NO_ERROR) + { LocalFree(curdir); LocalFree(thisdir); - return; + return errorlevel = ERROR_INVALID_FUNCTION; } else { curdir -> next = pushd_directories; curdir -> strings = thisdir; @@ -1914,6 +1919,7 @@ void WCMD_pushd (const WCHAR *args) } pushd_directories = curdir; } + return errorlevel = return_code; } diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp index 8d5926580d9..eb6abb14dea 100644 --- a/programs/cmd/tests/test_builtins.cmd.exp +++ b/programs/cmd/tests/test_builtins.cmd.exp @@ -508,12 +508,12 @@ FAILURE 1 SUCCESS 0 SUCCESS 0 --- success/failure for PUSHD/POPD commands -(a)todo_wine@SUCCESS 0 SUCCESS 0 +SUCCESS 0 +FAILURE 1 +SUCCESS 666 @todo_wine(a)FAILURE 1 -(a)todo_wine@SUCCESS 666 -(a)todo_wine@FAILURE 1 -(a)todo_wine@--- success/failure for DIR command +--- success/failure for DIR command FAILURE 1 FAILURE 1 SUCCESS 0 diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h index 0ca14e9f2ac..93620f05656 100644 --- a/programs/cmd/wcmd.h +++ b/programs/cmd/wcmd.h @@ -188,7 +188,7 @@ void WCMD_output_asis_stderr (const WCHAR *message); void WCMD_pause (void); void WCMD_popd (void); void WCMD_print_error (void); -void WCMD_pushd (const WCHAR *args); +RETURN_CODE WCMD_pushd(const WCHAR *args); void WCMD_remove_dir (WCHAR *command); RETURN_CODE WCMD_rename(void); void WCMD_run_program (WCHAR *command, BOOL called); diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index dc7da5979be..f8a08878fcb 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -1909,7 +1909,7 @@ static RETURN_CODE execute_single_command(const WCHAR *command) WCMD_volume (FALSE, parms_start); break; case WCMD_PUSHD: - WCMD_pushd(parms_start); + return_code = WCMD_pushd(parms_start); break; case WCMD_POPD: WCMD_popd();