diff options
author | James Booth <boothj5@gmail.com> | 2015-07-01 20:55:22 +0100 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2015-07-01 20:55:22 +0100 |
commit | 446f5f0aa1a9b06c71e12894cbca34d3733bd6e2 (patch) | |
tree | b28c82a22b502f98c52adf7aaa3bd85d0582c4b4 /src | |
parent | 3892665fe5a91ae3c4fe4103980da980f28e49fe (diff) | |
parent | f24019ee4daa5219b12f86f32d02de5051364c0d (diff) | |
download | profani-tty-446f5f0aa1a9b06c71e12894cbca34d3733bd6e2.tar.gz |
Merge remote-tracking branch 'pasis/ui-ignore-EINTR'
Diffstat (limited to 'src')
-rw-r--r-- | src/ui/inputwin.c | 25 |
1 files changed, 7 insertions, 18 deletions
diff --git a/src/ui/inputwin.c b/src/ui/inputwin.c index 2c42a628..2499f20a 100644 --- a/src/ui/inputwin.c +++ b/src/ui/inputwin.c @@ -71,6 +71,7 @@ static WINDOW *inp_win; static int pad_start = 0; static struct timeval p_rl_timeout; +/* Timeout in ms. Shows how long select() may block. */ static gint inp_timeout = 0; static gint no_input_count = 0; @@ -115,14 +116,6 @@ create_input_window(void) #else ESCDELAY = 25; #endif - if (inp_timeout == 1000) { - p_rl_timeout.tv_sec = 1; - p_rl_timeout.tv_usec = 0; - } else { - p_rl_timeout.tv_sec = 0; - p_rl_timeout.tv_usec = inp_timeout * 1000; - } - rl_readline_name = "profanity"; rl_getc_function = _inp_rl_getc; rl_startup_hook = _inp_rl_startup_hook; @@ -141,13 +134,17 @@ inp_readline(void) { free(inp_line); inp_line = NULL; + p_rl_timeout.tv_sec = inp_timeout / 1000; + p_rl_timeout.tv_usec = inp_timeout % 1000 * 1000; FD_ZERO(&fds); FD_SET(fileno(rl_instream), &fds); errno = 0; r = select(FD_SETSIZE, &fds, NULL, NULL, &p_rl_timeout); if (r < 0) { - char *err_msg = strerror(errno); - log_error("Readline failed: %s", err_msg); + if (errno != EINTR) { + char *err_msg = strerror(errno); + log_error("Readline failed: %s", err_msg); + } return NULL; } @@ -169,14 +166,6 @@ inp_readline(void) prof_handle_idle(); } - if (inp_timeout == 1000) { - p_rl_timeout.tv_sec = 1; - p_rl_timeout.tv_usec = 0; - } else { - p_rl_timeout.tv_sec = 0; - p_rl_timeout.tv_usec = inp_timeout * 1000; - } - if (inp_line) { return strdup(inp_line); } else { |