Module: wine Branch: master Commit: 2fe271ef814b6bd12e13cd45a39d91b62f5f4c03 URL: https://gitlab.winehq.org/wine/wine/-/commit/2fe271ef814b6bd12e13cd45a39d91b...
Author: Eric Pouech epouech@codeweavers.com Date: Fri May 24 15:01:01 2024 +0200
cmd: Set success/failure return code for RMDIR/RD command.
Signed-off-by: Eric Pouech epouech@codeweavers.com
---
programs/cmd/builtins.c | 19 ++++++++++++------- programs/cmd/tests/test_builtins.cmd.exp | 12 ++++++------ programs/cmd/wcmd.h | 2 +- programs/cmd/wcmdmain.c | 2 +- 4 files changed, 20 insertions(+), 15 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index 9771511322c..febf6ba94b6 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -2100,11 +2100,11 @@ void WCMD_pause (void) * Delete a directory. */
-void WCMD_remove_dir (WCHAR *args) { - +RETURN_CODE WCMD_remove_dir(WCHAR *args) +{ int argno = 0; int argsProcessed = 0; - WCHAR *argN = args; + WCHAR *argN = args;
/* Loop through all args */ while (argN) { @@ -2117,7 +2117,12 @@ void WCMD_remove_dir (WCHAR *args) { /* If subdirectory search not supplied, just try to remove and report error if it fails (eg if it contains a file) */ if (wcsstr(quals, L"/S") == NULL) { - if (!RemoveDirectoryW(thisArg)) WCMD_print_error (); + if (!RemoveDirectoryW(thisArg)) + { + RETURN_CODE return_code = GetLastError(); + WCMD_print_error(); + return return_code; + }
/* Otherwise use ShFileOp to recursively remove a directory */ } else { @@ -2134,7 +2139,7 @@ void WCMD_remove_dir (WCHAR *args) { ok = WCMD_ask_confirm(question, TRUE, NULL);
/* Abort if answer is 'N' */ - if (!ok) return; + if (!ok) return ERROR_INVALID_FUNCTION; }
/* Do the delete */ @@ -2155,9 +2160,9 @@ void WCMD_remove_dir (WCHAR *args) { /* Handle no valid args */ if (argsProcessed == 0) { WCMD_output_stderr(WCMD_LoadMessage(WCMD_NOARG)); - return; + return ERROR_INVALID_FUNCTION; } - + return NO_ERROR; }
/**************************************************************************** diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp index 501b27af725..6a25fb3aab9 100644 --- a/programs/cmd/tests/test_builtins.cmd.exp +++ b/programs/cmd/tests/test_builtins.cmd.exp @@ -523,19 +523,19 @@ SUCCESS 0 FAILURE 1 SUCCESS 0 --- success/failure for RMDIR/RD command -@todo_wine@FAILURE 1 -@todo_wine@FAILURE 145 -@todo_wine@FAILURE 267 +FAILURE 1 +FAILURE 145 +FAILURE 267 SUCCESS 666 -@todo_wine@FAILURE 2 -@todo_wine@FAILURE 3 +FAILURE 2 +FAILURE 3 ERRORLEVEL 666 ERRORLEVEL 666 ERRORLEVEL 666 ERRORLEVEL 666 ERRORLEVEL 666 ERRORLEVEL 666 -@todo_wine@--- +--- ------------ Testing 'set' ------------ 1 0 diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h index 9e10069cdac..5f51a4e1f3a 100644 --- a/programs/cmd/wcmd.h +++ b/programs/cmd/wcmd.h @@ -189,7 +189,7 @@ void WCMD_pause (void); RETURN_CODE WCMD_popd(void); void WCMD_print_error (void); RETURN_CODE WCMD_pushd(const WCHAR *args); -void WCMD_remove_dir (WCHAR *command); +RETURN_CODE WCMD_remove_dir(WCHAR *command); RETURN_CODE WCMD_rename(void); void WCMD_run_program (WCHAR *command, BOOL called); void WCMD_setlocal (const WCHAR *args); diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index 2a814cfe7b0..f5610a5934b 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -1875,7 +1875,7 @@ static RETURN_CODE execute_single_command(const WCHAR *command) break; case WCMD_RD: case WCMD_RMDIR: - WCMD_remove_dir (parms_start); + return_code = WCMD_remove_dir(parms_start); break; case WCMD_SETLOCAL: WCMD_setlocal(parms_start);