lineedit: do not hang on error, but return error indicator.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
This commit is contained in:
Denys Vlasenko 2010-09-07 18:40:53 +02:00
parent 8b2f13d84d
commit d55f599440

View File

@ -2169,7 +2169,7 @@ int FAST_FUNC read_line_input(const char *prompt, char *command, int maxsize, li
ic = lineedit_read_key(read_key_buffer); ic = lineedit_read_key(read_key_buffer);
if (errno) /* error */ if (errno) /* error */
goto prepare_to_die; goto return_error_indicator;
if (ic == ic_raw) { /* "cc", "dd" */ if (ic == ic_raw) { /* "cc", "dd" */
input_backward(cursor); input_backward(cursor);
goto clear_to_eol; goto clear_to_eol;
@ -2233,7 +2233,7 @@ int FAST_FUNC read_line_input(const char *prompt, char *command, int maxsize, li
//FIXME: unicode case? //FIXME: unicode case?
ic = lineedit_read_key(read_key_buffer); ic = lineedit_read_key(read_key_buffer);
if (errno) /* error */ if (errno) /* error */
goto prepare_to_die; goto return_error_indicator;
if (ic < ' ' || ic > 255) { if (ic < ' ' || ic > 255) {
beep(); beep();
} else { } else {
@ -2305,9 +2305,9 @@ int FAST_FUNC read_line_input(const char *prompt, char *command, int maxsize, li
* or exit if len=0 and no chars to delete */ * or exit if len=0 and no chars to delete */
if (command_len == 0) { if (command_len == 0) {
errno = 0; errno = 0;
#if ENABLE_FEATURE_EDITING_VI
prepare_to_die: case -1: /* error (e.g. EIO when tty is destroyed) */
#endif IF_FEATURE_EDITING_VI(return_error_indicator:)
break_out = command_len = -1; break_out = command_len = -1;
break; break;
} }
@ -2317,7 +2317,7 @@ int FAST_FUNC read_line_input(const char *prompt, char *command, int maxsize, li
// /* Control-V -- force insert of next char */ // /* Control-V -- force insert of next char */
// if (c == CTRL('V')) { // if (c == CTRL('V')) {
// if (safe_read(STDIN_FILENO, &c, 1) < 1) // if (safe_read(STDIN_FILENO, &c, 1) < 1)
// goto prepare_to_die; // goto return_error_indicator;
// if (c == 0) { // if (c == 0) {
// beep(); // beep();
// break; // break;