b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame] | 1 | --- a/libbb/lineedit.c |
| 2 | +++ b/libbb/lineedit.c |
| 3 | @@ -2467,6 +2467,7 @@ int FAST_FUNC read_line_input(line_input |
| 4 | #endif |
| 5 | struct termios initial_settings; |
| 6 | struct termios new_settings; |
| 7 | + struct termios tmp_settings; |
| 8 | char read_key_buffer[KEYCODE_BUFFER_SIZE]; |
| 9 | |
| 10 | INIT_S(); |
| 11 | @@ -3006,7 +3007,15 @@ int FAST_FUNC read_line_input(line_input |
| 12 | #endif |
| 13 | |
| 14 | /* restore initial_settings */ |
| 15 | - tcsetattr_stdin_TCSANOW(&initial_settings); |
| 16 | + if (tcgetattr(STDIN_FILENO, &tmp_settings) < 0){ |
| 17 | + tcsetattr_stdin_TCSANOW(&initial_settings); |
| 18 | + }else{ |
| 19 | + tmp_settings.c_lflag |= (ICANON | ECHO | ECHONL | ISIG); |
| 20 | + tmp_settings.c_cc[VMIN] = initial_settings.c_cc[VMIN]; |
| 21 | + tmp_settings.c_cc[VTIME] = initial_settings.c_cc[VTIME]; |
| 22 | + tcsetattr_stdin_TCSANOW(&tmp_settings); |
| 23 | + } |
| 24 | + |
| 25 | #if ENABLE_FEATURE_EDITING_WINCH |
| 26 | /* restore SIGWINCH handler */ |
| 27 | sigaction_set(SIGWINCH, &S.SIGWINCH_handler); |