avoid clobbering termios in setup_tty
authorChristos Zoulas <christos@ucbvax.Berkeley.EDU>
Sun, 20 Mar 1994 08:32:37 +0000 (00:32 -0800)
committerChristos Zoulas <christos@ucbvax.Berkeley.EDU>
Sun, 20 Mar 1994 08:32:37 +0000 (00:32 -0800)
SCCS-vsn: bin/csh/file.c 8.2

usr/src/bin/csh/file.c

index 94ccc0b..58fa3c4 100644 (file)
@@ -6,7 +6,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)file.c     8.1 (Berkeley) %G%";
+static char sccsid[] = "@(#)file.c     8.2 (Berkeley) %G%";
 #endif /* not lint */
 
 #ifdef FILEC
 #endif /* not lint */
 
 #ifdef FILEC
@@ -86,8 +86,9 @@ setup_tty(on)
 {
     static struct termios tchars;
 
 {
     static struct termios tchars;
 
+    (void) tcgetattr(SHIN, &tchars);
+
     if (on) {
     if (on) {
-       (void) tcgetattr(SHIN, &tchars);
        tchars.c_cc[VEOL] = ESC;
        if (tchars.c_lflag & ICANON)
            on = TCSANOW;
        tchars.c_cc[VEOL] = ESC;
        if (tchars.c_lflag & ICANON)
            on = TCSANOW;
@@ -95,12 +96,13 @@ setup_tty(on)
            on = TCSAFLUSH;
            tchars.c_lflag |= ICANON;
        }
            on = TCSAFLUSH;
            tchars.c_lflag |= ICANON;
        }
-        (void) tcsetattr(SHIN, on, &tchars);
     }
     else {
        tchars.c_cc[VEOL] = _POSIX_VDISABLE;
     }
     else {
        tchars.c_cc[VEOL] = _POSIX_VDISABLE;
-       (void) tcsetattr(SHIN, TCSANOW, &tchars);
+       on = TCSANOW;
     }
     }
+
+    (void) tcsetattr(SHIN, TCSANOW, &tchars);
 }
 
 /*
 }
 
 /*