From: Eric Pouech epouech@codeweavers.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48027
Signed-off-by: Eric Pouech epouech@codeweavers.com --- programs/cmd/builtins.c | 3 +- programs/cmd/wcmdmain.c | 85 ----------------------------------------- 2 files changed, 2 insertions(+), 86 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index ef84bee64ac..db2ced8d5e0 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -410,7 +410,8 @@ RETURN_CODE WCMD_choice(WCHAR *args) char choice;
overlapped.hEvent = CreateEventW(NULL, TRUE, FALSE, NULL); - if (SetFilePointerEx(GetStdHandle(STD_INPUT_HANDLE), zeroli, &li, FILE_CURRENT)) + if (GetFileType(GetStdHandle(STD_INPUT_HANDLE)) == FILE_TYPE_DISK && + SetFilePointerEx(GetStdHandle(STD_INPUT_HANDLE), zeroli, &li, FILE_CURRENT)) { overlapped.Offset = li.LowPart; overlapped.OffsetHigh = li.HighPart; diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index 365dd071768..d5b9eb32799 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -4454,88 +4454,6 @@ static RETURN_CODE for_control_execute(CMD_FOR_CONTROL *for_ctrl, CMD_NODE *node return return_code; }
-static RETURN_CODE handle_pipe_command_old(CMD_NODE *node) -{ - static SECURITY_ATTRIBUTES sa = {.nLength = sizeof(sa), .lpSecurityDescriptor = NULL, .bInheritHandle = TRUE}; - WCHAR temp_path[MAX_PATH]; - WCHAR filename[MAX_PATH]; - CMD_REDIRECTION *output; - HANDLE saved[3]; - struct batch_context *saved_context = context; - RETURN_CODE return_code; - - /* pipe LHS & RHS are run outside of any batch context */ - context = NULL; - /* FIXME: a real pipe instead of writing to an intermediate file would be - * better. - * But waiting for completion of commands will require more work. - */ - /* FIXME check precedence (eg foo > a | more) - * with following code, | has higher precedence than > a - * (which is likely wrong IIRC, and not what previous code was doing) - */ - /* Generate a unique temporary filename */ - GetTempPathW(ARRAY_SIZE(temp_path), temp_path); - GetTempFileNameW(temp_path, L"CMD", 0, filename); - TRACE("Using temporary file of %ls\n", filename); - - /* set output for left hand side command */ - output = redirection_create_file(REDIR_WRITE_TO, 1, filename); - if (push_std_redirections(output, saved)) - { - RETURN_CODE return_code_left = node_execute(node->left); - pop_std_redirections(saved); - - if (errorlevel == RETURN_CODE_CANT_LAUNCH && saved_context) - ExitProcess(255); - return_code = ERROR_INVALID_FUNCTION; - if (!WCMD_is_break(return_code_left) && errorlevel != RETURN_CODE_CANT_LAUNCH) - { - HANDLE h = CreateFileW(filename, GENERIC_READ, - FILE_SHARE_READ | FILE_SHARE_WRITE, &sa, OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL, NULL); - if (h != INVALID_HANDLE_VALUE) - { - SetStdHandle(STD_INPUT_HANDLE, h); - return_code = node_execute(node->right); - if (errorlevel == RETURN_CODE_CANT_LAUNCH && saved_context) - ExitProcess(255); - } - } - DeleteFileW(filename); - errorlevel = return_code; - } - else return_code = ERROR_INVALID_FUNCTION; - redirection_dispose_list(output); - context = saved_context; - - return return_code; -} - -/* temp helper during migration */ -static BOOL can_run_new_pipe(CMD_NODE *node) -{ - switch (node->op) - { - case CMD_SINGLE: - return TRUE; - case CMD_PIPE: - case CMD_CONCAT: - case CMD_ONFAILURE: - case CMD_ONSUCCESS: - return can_run_new_pipe(node->left) && can_run_new_pipe(node->right); - case CMD_IF: - return can_run_new_pipe(node->then_block) && - (!node->else_block || can_run_new_pipe(node->else_block)); - case CMD_FOR: - return can_run_new_pipe(node->do_block); - case CMD_BLOCK: - return can_run_new_pipe(node->block); - default: - return FALSE; - } -} - static RETURN_CODE spawn_pipe_sub_command(CMD_NODE *node, HANDLE *child) { WCHAR cmd_string[MAXSTRING]; @@ -4621,9 +4539,6 @@ static RETURN_CODE handle_pipe_command(CMD_NODE *node) HANDLE saved_output; RETURN_CODE return_code;
- if (!can_run_new_pipe(node->left) || !can_run_new_pipe(node->right)) - return handle_pipe_command_old(node); - if (!CreatePipe(&read_pipe, &write_pipe, &sa, 0)) return ERROR_INVALID_FUNCTION; saved_output = GetStdHandle(STD_OUTPUT_HANDLE);