1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-25 01:02:24 +00:00

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.

[originally from svn r7742]
[r7738 == d0db31a1ca]
This commit is contained in:
Ben Harris 2007-09-24 21:43:48 +00:00
parent 57c3ac7f14
commit 38ee5fc58d

View File

@ -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();