From 9b7089a0401b5d0973cace08f1f632d526a06377 Mon Sep 17 00:00:00 2001 From: Paul Mackerras Date: Sat, 29 Apr 2000 12:32:59 +0000 Subject: [PATCH] don't fall over in the charshunt if we get an EAGAIN or EINTR error on a write. --- pppd/main.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/pppd/main.c b/pppd/main.c index d5c4d13..0722e91 100644 --- a/pppd/main.c +++ b/pppd/main.c @@ -17,7 +17,7 @@ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ -#define RCSID "$Id: main.c,v 1.97 2000/04/24 02:54:16 masputra Exp $" +#define RCSID "$Id: main.c,v 1.98 2000/04/29 12:32:59 paulus Exp $" #include #include @@ -2417,12 +2417,13 @@ charshunt(ifd, ofd, record_file) n = max_level - olevel; n = write(ofd, obufp, n); if (n < 0) { - if (errno != EIO) { + if (errno == EIO) { + pty_readable = 0; + nobuf = 0; + } else if (errno != EAGAIN && errno != EINTR) { error("Error writing standard output: %m"); break; } - pty_readable = 0; - nobuf = 0; } else { obufp += n; nobuf -= n; @@ -2435,12 +2436,13 @@ charshunt(ifd, ofd, record_file) n = max_level - ilevel; n = write(pty_master, ibufp, n); if (n < 0) { - if (errno != EIO) { + if (errno == EIO) { + stdin_readable = 0; + nibuf = 0; + } else if (errno != EAGAIN && errno != EINTR) { error("Error writing pseudo-tty master: %m"); break; } - stdin_readable = 0; - nibuf = 0; } else { ibufp += n; nibuf -= n; -- 2.39.2