don't fall over in the charshunt if we get an EAGAIN or EINTR
[ppp.git] / pppd / main.c
index 5e047d52c501f1d5ba2525fc0623e90e30429c88..0722e9104076417b68500f16058a98f31f1e8f2d 100644 (file)
@@ -17,7 +17,7 @@
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
-#define RCSID  "$Id: main.c,v 1.96 2000/04/21 01:27:17 masputra Exp $"
+#define RCSID  "$Id: main.c,v 1.98 2000/04/29 12:32:59 paulus Exp $"
 
 #include <stdio.h>
 #include <ctype.h>
 
 #include <stdio.h>
 #include <ctype.h>
@@ -1022,7 +1022,7 @@ void
 set_ifunit(iskey)
     int iskey;
 {
 set_ifunit(iskey)
     int iskey;
 {
-    info("Using interface ppp%d", ifunit);
+    info("Using interface %s%d", PPP_DRV_NAME, ifunit);
     slprintf(ifname, sizeof(ifname), PPP_DRV_NAME "%d", ifunit);
     script_setenv("IFNAME", ifname, iskey);
     if (iskey) {
     slprintf(ifname, sizeof(ifname), PPP_DRV_NAME "%d", ifunit);
     script_setenv("IFNAME", ifname, iskey);
     if (iskey) {
@@ -2417,12 +2417,13 @@ charshunt(ifd, ofd, record_file)
                n = max_level - olevel;
            n = write(ofd, obufp, n);
            if (n < 0) {
                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;
                }
                    error("Error writing standard output: %m");
                    break;
                }
-               pty_readable = 0;
-               nobuf = 0;
            } else {
                obufp += n;
                nobuf -= n;
            } 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) {
                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;
                }
                    error("Error writing pseudo-tty master: %m");
                    break;
                }
-               stdin_readable = 0;
-               nibuf = 0;
            } else {
                ibufp += n;
                nibuf -= n;
            } else {
                ibufp += n;
                nibuf -= n;