From: Eric Pouech epouech@codeweavers.com
Signed-off-by: Eric Pouech epouech@codeweavers.com --- programs/cmd/builtins.c | 21 ++++++++++++++------- programs/cmd/tests/test_builtins.cmd.exp | 10 +++++----- programs/cmd/wcmd.h | 2 +- programs/cmd/wcmdmain.c | 2 +- 4 files changed, 21 insertions(+), 14 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index faff537be73..7a023ba917c 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -1158,23 +1158,30 @@ static BOOL create_full_path(WCHAR* path) return FALSE; }
-void WCMD_create_dir (WCHAR *args) { +RETURN_CODE WCMD_create_dir(WCHAR *args) +{ int argno = 0; WCHAR *argN = args; + RETURN_CODE return_code;
- if (param1[0] == 0x00) { + if (param1[0] == L'\0') + { WCMD_output_stderr(WCMD_LoadMessage(WCMD_NOARG)); - return; + return errorlevel = ERROR_INVALID_FUNCTION; } + return_code = NO_ERROR; /* Loop through all args */ - while (TRUE) { + for (;;) + { WCHAR *thisArg = WCMD_parameter(args, argno++, &argN, FALSE, FALSE); if (!argN) break; - if (!create_full_path(thisArg)) { - WCMD_print_error (); - errorlevel = ERROR_INVALID_FUNCTION; + if (!create_full_path(thisArg)) + { + WCMD_print_error(); + return_code = ERROR_INVALID_FUNCTION; } } + return errorlevel = return_code; }
/* Parse the /A options given by the user on the commandline diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp index 8be714a9158..ef93def2732 100644 --- a/programs/cmd/tests/test_builtins.cmd.exp +++ b/programs/cmd/tests/test_builtins.cmd.exp @@ -497,11 +497,11 @@ SUCCESS 0 FAILURE 1 FAILURE 1 --- success/failure for MKDIR,MD command -@todo_wine@FAILURE 1 -@todo_wine@SUCCESS 0 -@todo_wine@FAILURE 1 -@todo_wine@FAILURE 1 -@todo_wine@SUCCESS 0 +FAILURE 1 +SUCCESS 0 +FAILURE 1 +FAILURE 1 +SUCCESS 0 --- success/failure for CD command @todo_wine@SUCCESS 0 @todo_wine@FAILURE 1 diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h index 0b0a96c5fb8..8fe2eb3f322 100644 --- a/programs/cmd/wcmd.h +++ b/programs/cmd/wcmd.h @@ -167,7 +167,7 @@ void WCMD_choice (const WCHAR *); void WCMD_clear_screen (void); void WCMD_color (void); RETURN_CODE WCMD_copy(WCHAR *); -void WCMD_create_dir (WCHAR *); +RETURN_CODE WCMD_create_dir(WCHAR *); RETURN_CODE WCMD_delete(WCHAR *); void WCMD_directory (WCHAR *); RETURN_CODE WCMD_echo(const WCHAR *); diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index c096abe3431..ededdcd2177 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -1849,7 +1849,7 @@ static RETURN_CODE execute_single_command(const WCHAR *command) break; case WCMD_MD: case WCMD_MKDIR: - WCMD_create_dir (parms_start); + return_code = WCMD_create_dir(parms_start); break; case WCMD_MOVE: return_code = WCMD_move();