diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index b14aa477380..77f40a87fd0 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -2144,10 +2144,9 @@ void WCMD_remove_dir (WCHAR *args) { * Rename a file. */ -void WCMD_rename (void) +RETURN_CODE WCMD_rename(void) { - BOOL status; - HANDLE hff; + HANDLE hff; WIN32_FIND_DATAW fd; WCHAR input[MAX_PATH]; WCHAR *dotDst = NULL; @@ -2161,20 +2160,18 @@ void WCMD_rename (void) /* Must be at least two args */ if (param1[0] == 0x00 || param2[0] == 0x00) { WCMD_output_stderr(WCMD_LoadMessage(WCMD_NOARG)); - errorlevel = ERROR_INVALID_FUNCTION; - return; + return errorlevel = ERROR_INVALID_FUNCTION; } /* Destination cannot contain a drive letter or directory separator */ if ((wcschr(param2,':') != NULL) || (wcschr(param2,'\\') != NULL)) { SetLastError(ERROR_INVALID_PARAMETER); WCMD_print_error(); - errorlevel = ERROR_INVALID_FUNCTION; - return; + return errorlevel = ERROR_INVALID_FUNCTION; } /* Convert partial path to full path */ - if (!WCMD_get_fullpath(param1, ARRAY_SIZE(input), input, NULL)) return; + if (!WCMD_get_fullpath(param1, ARRAY_SIZE(input), input, NULL)) return errorlevel = ERROR_INVALID_FUNCTION; WINE_TRACE("Rename from '%s'('%s') to '%s'\n", wine_dbgstr_w(input), wine_dbgstr_w(param1), wine_dbgstr_w(param2)); dotDst = wcschr(param2, '.'); @@ -2184,8 +2181,9 @@ void WCMD_rename (void) hff = FindFirstFileW(input, &fd); if (hff == INVALID_HANDLE_VALUE) - return; + return errorlevel = ERROR_INVALID_FUNCTION; + errorlevel = NO_ERROR; do { WCHAR dest[MAX_PATH]; WCHAR src[MAX_PATH]; @@ -2228,15 +2226,14 @@ void WCMD_rename (void) WINE_TRACE("Source '%s'\n", wine_dbgstr_w(src)); WINE_TRACE("Dest '%s'\n", wine_dbgstr_w(dest)); - status = MoveFileW(src, dest); - - if (!status) { + if (!MoveFileW(src, dest)) { WCMD_print_error (); errorlevel = ERROR_INVALID_FUNCTION; } } while (FindNextFileW(hff, &fd) != 0); FindClose(hff); + return errorlevel; } /***************************************************************************** diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp index 0c6362d227a..c17f00c0c02 100644 --- a/programs/cmd/tests/test_builtins.cmd.exp +++ b/programs/cmd/tests/test_builtins.cmd.exp @@ -486,10 +486,10 @@ FAILURE 1 FAILURE 1 FAILURE 1 --- success/failure for RENAME command -@todo_wine@FAILURE 1 -@todo_wine@FAILURE 1 -@todo_wine@FAILURE 1 -@todo_wine@FAILURE 1 +FAILURE 1 +FAILURE 1 +FAILURE 1 +FAILURE 1 SUCCESS 0 --- success/failure for ERASE command FAILURE 1 diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h index d2ef5b46b86..752ee251cd2 100644 --- a/programs/cmd/wcmd.h +++ b/programs/cmd/wcmd.h @@ -190,7 +190,7 @@ void WCMD_popd (void); void WCMD_print_error (void); void WCMD_pushd (const WCHAR *args); void WCMD_remove_dir (WCHAR *command); -void WCMD_rename (void); +RETURN_CODE WCMD_rename(void); void WCMD_run_program (WCHAR *command, BOOL called); void WCMD_setlocal (const WCHAR *args); void WCMD_setshow_date (void); diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index 18315e9ce2b..5e429c2f3f0 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -1867,7 +1867,7 @@ static RETURN_CODE execute_single_command(const WCHAR *command) break; case WCMD_REN: case WCMD_RENAME: - WCMD_rename (); + return_code = WCMD_rename(); break; case WCMD_RD: case WCMD_RMDIR: