diff --git a/bash-5.1/r_execute_cmd/src/lib.rs b/bash-5.1/r_execute_cmd/src/lib.rs index b55d332b9b8271b0544b82f8220fb0ac48ef3489..93fd83851587f5fc2fd3a7c6feadead0856a59e1 100644 --- a/bash-5.1/r_execute_cmd/src/lib.rs +++ b/bash-5.1/r_execute_cmd/src/lib.rs @@ -3647,8 +3647,37 @@ unsafe extern "C" fn execute_while_or_until( return body_status; } +unsafe extern "C" fn execute_if_command(mut if_command: *mut IF_COM) -> libc::c_int { + let mut return_value: libc::c_int = 0; + let mut save_line_number: libc::c_int = 0; + + save_line_number = line_number; + (*(*if_command).test).flags |= CMD_IGNORE_RETURN as libc::c_int; + return_value = execute_command((*if_command).test); + line_number = save_line_number; + if return_value == EXECUTION_SUCCESS as libc::c_int { + QUIT!(); + + if !((*if_command).true_case).is_null() + && (*if_command).flags & CMD_IGNORE_RETURN as libc::c_int != 0 + { + (*(*if_command).true_case).flags |= CMD_IGNORE_RETURN as libc::c_int; + } + return execute_command((*if_command).true_case); + } else { + QUIT!(); + + if !((*if_command).false_case).is_null() + && (*if_command).flags & CMD_IGNORE_RETURN as libc::c_int != 0 + { + (*(*if_command).false_case).flags |= CMD_IGNORE_RETURN as libc::c_int; + } + + return execute_command((*if_command).false_case); + }; +}