From 848d09e66dbb11beb59d93cefd1b82a234b35d24 Mon Sep 17 00:00:00 2001 From: ben Date: Mon, 24 Sep 2007 21:43:48 +0000 Subject: [PATCH] My changes in r7738 (O_NONBLOCK for Unix Plink) were half-arsed, and completely broke interactive logins. The problem, or at least one of the problems, was that in interactive use stdin, stdout, and stderr tend to be the same file, so setting O_NONBLOCK on the latter two also sets it on the former. Thus, we need to cope with all of them being non-blocking. git-svn-id: svn://svn.tartarus.org/sgt/putty@7742 cda61777-01e9-0310-a592-d414129be87e --- unix/uxplink.c | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/unix/uxplink.c b/unix/uxplink.c index db881997..13369b10 100644 --- a/unix/uxplink.c +++ b/unix/uxplink.c @@ -385,7 +385,7 @@ void try_output(int is_stderr) ret = write(fd, senddata, sendlen); if (ret > 0) bufchain_consume(chain, ret); - else if (ret < 0 && errno != EWOULDBLOCK) { + else if (ret < 0) { perror(is_stderr ? "stderr: write" : "stdout: write"); exit(1); } @@ -883,23 +883,6 @@ int main(int argc, char **argv) local_tty = (tcgetattr(STDIN_FILENO, &orig_termios) == 0); atexit(cleanup_termios); ldisc_update(NULL, 1, 1); - - { - int fl; - /* - * Make sure that stdout/err are non-blocking. - */ - if ((fl = fcntl(STDOUT_FILENO, F_GETFL)) == -1 || - fcntl(STDOUT_FILENO, F_SETFL, fl | O_NONBLOCK) == -1) { - perror("stdout"); - exit(1); - } - if ((fl = fcntl(STDERR_FILENO, F_GETFL)) == -1 || - fcntl(STDERR_FILENO, F_SETFL, fl | O_NONBLOCK) == -1) { - perror("stderr"); - exit(1); - } - } sending = FALSE; now = GETTICKCOUNT(); -- 2.11.0