]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/sys-bsd.c
.
[ppp.git] / pppd / sys-bsd.c
index c884a62914a94cff32294191f4739003a2ca087c..e9dcd5af7f60f0214ba08a6682e5871da6fd9268 100644 (file)
@@ -19,7 +19,7 @@
  */
 
 #ifndef lint
-static char rcsid[] = "$Id: sys-bsd.c,v 1.17 1995/04/27 00:33:39 paulus Exp $";
+static char rcsid[] = "$Id: sys-bsd.c,v 1.20 1995/08/11 02:36:21 paulus Exp $";
 #endif
 
 /*
@@ -57,6 +57,7 @@ static int rtm_seq;
 
 static int     restore_term;   /* 1 => we've munged the terminal */
 static struct termios inittermios; /* Initial TTY termios */
+static struct winsize wsinfo;  /* Initial window size info */
 
 static char *lock_file;                /* name of lock file created */
 
@@ -213,8 +214,10 @@ set_up_tty(fd, local)
        die(1);
     }
 
-    if (!restore_term)
+    if (!restore_term) {
        inittermios = tios;
+       ioctl(fd, TIOCGWINSZ, &wsinfo);
+    }
 
     tios.c_cflag &= ~(CSIZE | CSTOPB | PARENB | CLOCAL);
     if (crtscts > 0)
@@ -269,9 +272,19 @@ void
 restore_tty()
 {
     if (restore_term) {
+       if (!default_device) {
+           /*
+            * Turn off echoing, because otherwise we can get into
+            * a loop with the tty and the modem echoing to each other.
+            * We presume we are the sole user of this tty device, so
+            * when we close it, it will revert to its defaults anyway.
+            */
+           inittermios.c_lflag &= ~(ECHO | ECHONL);
+       }
        if (tcsetattr(fd, TCSAFLUSH, &inittermios) < 0)
            if (errno != ENXIO)
                syslog(LOG_WARNING, "tcsetattr: %m");
+       ioctl(fd, TIOCSWINSZ, &wsinfo);
        restore_term = 0;
     }
 }
@@ -341,10 +354,8 @@ read_packet(buf)
     int len;
 
     if ((len = read(fd, buf, PPP_MTU + PPP_HDRLEN)) < 0) {
-       if (errno == EWOULDBLOCK || errno == EINTR) {
-           MAINDEBUG((LOG_DEBUG, "read(fd): %m"));
+       if (errno == EWOULDBLOCK || errno == EINTR)
            return -1;
-       }
        syslog(LOG_ERR, "read(fd): %m");
        die(1);
     }