From: Eric Pouech epouech@codeweavers.com
Signed-off-by: Eric Pouech epouech@codeweavers.com --- programs/cmd/tests/test_builtins.cmd.exp | 12 ++++++------ programs/cmd/wcmdmain.c | 13 +++++++------ 2 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp index 33d4609f289..5d9629e35a9 100644 --- a/programs/cmd/tests/test_builtins.cmd.exp +++ b/programs/cmd/tests/test_builtins.cmd.exp @@ -488,16 +488,16 @@ FAILURE 1025 FAILURE 2 --- success/failure for pipes b -@todo_wine@SUCCESS 0 +SUCCESS 0 FAILURE 1 a -@todo_wine@SUCCESS 0 +SUCCESS 0 FAILURE 3 a -@todo_wine@SUCCESS 0 -@todo_wine@FAILURE 255 -@todo_wine@FAILURE 255 -@todo_wine@--- success/failure for START command +SUCCESS 0 +FAILURE 255 +FAILURE 255 +--- success/failure for START command @todo_wine@FAILURE 1 foo@space@ SUCCESS 1024 diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index e1c8802f6e8..d3ad93837d4 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -3723,12 +3723,13 @@ RETURN_CODE node_execute(CMD_NODE *node) if (set_std_redirections(output)) { RETURN_CODE return_code_left = node_execute(node->left); - return_code = NO_ERROR; - CloseHandle(GetStdHandle(STD_OUTPUT_HANDLE)); SetStdHandle(STD_OUTPUT_HANDLE, saved_output);
- if (return_code == NO_ERROR) + if (errorlevel == RETURN_CODE_CANT_LAUNCH && saved_context) + ExitProcess(255); + return_code = ERROR_INVALID_FUNCTION; + if (return_code_left != RETURN_CODE_ABORTED && errorlevel != RETURN_CODE_CANT_LAUNCH) { HANDLE h = CreateFileW(filename, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, &sa, OPEN_EXISTING, @@ -3737,12 +3738,12 @@ RETURN_CODE node_execute(CMD_NODE *node) { SetStdHandle(STD_INPUT_HANDLE, h); return_code = node_execute(node->right); + if (errorlevel == RETURN_CODE_CANT_LAUNCH && saved_context) + ExitProcess(255); } - else return_code = ERROR_INVALID_FUNCTION; } DeleteFileW(filename); - if (return_code_left != NO_ERROR || return_code != NO_ERROR) - errorlevel = ERROR_INVALID_FUNCTION; + errorlevel = return_code; } else return_code = ERROR_INVALID_FUNCTION; redirection_dispose_list(output);