Date: Tue Feb 26 11:28:51 PST 2008
Files: unix/tclUnixChan.c

--- unix/tclUnixChan.c.tip35-mopup.old	2008-02-26 10:51:43.176536344 -0800
+++ unix/tclUnixChan.c	2008-02-26 11:28:43.004325536 -0800
@@ -142,8 +142,6 @@
 typedef struct TtyState {
     FileState fs;		/* Per-instance state of the file descriptor.
 				 * Must be the first field. */
-    int stateUpdated;		/* Flag to say if the state has been modified
-				 * and needs resetting. */
     IOSTATE savedState;		/* Initial state of device. Used to reset
 				 * state when device closed. */
 } TtyState;
@@ -254,8 +252,6 @@
 			    const char *buf, int toWrite, int *errorCode);
 static void		TcpWatchProc(ClientData instanceData, int mask);
 #ifdef SUPPORTS_TTY
-static int		TtyCloseProc(ClientData instanceData,
-			    Tcl_Interp *interp);
 static void		TtyGetAttributes(int fd, TtyAttrs *ttyPtr);
 static int		TtyGetOptionProc(ClientData instanceData,
 			    Tcl_Interp *interp, const char *optionName,
@@ -311,7 +307,7 @@
 static Tcl_ChannelType ttyChannelType = {
     "tty",			/* Type name. */
     TCL_CHANNEL_VERSION_5,	/* v5 channel */
-    TtyCloseProc,		/* Close proc. */
+    FileCloseProc,		/* Close proc. */
     FileInputProc,		/* Input proc. */
     FileOutputProc,		/* Output proc. */
     NULL,			/* Seek proc. */
@@ -714,46 +710,6 @@
 }
 
 #ifdef SUPPORTS_TTY
-/*
- *----------------------------------------------------------------------
- *
- * TtyCloseProc --
- *
- *	This function is called from the generic IO level to perform
- *	channel-type-specific cleanup when a tty based channel is closed.
- *
- * Results:
- *	0 if successful, errno if failed.
- *
- * Side effects:
- *	Closes the device of the channel.
- *
- *----------------------------------------------------------------------
- */
-
-static int
-TtyCloseProc(
-    ClientData instanceData,	/* Tty state. */
-    Tcl_Interp *interp)		/* For error reporting - unused. */
-{
-#if 0
-    /*
-     * TIP#35 agreed to remove the unsave so that TCL could be used as a
-     * simple stty. It would be cleaner to remove all the stuff related to
-     *	  TtyState.stateUpdated
-     *	  TtyState.savedState
-     * Then the structure TtyState would be the same as FileState. IMO this
-     * cleanup could better be done for the final 8.4 release after nobody
-     * complained about the missing unsave. - schroedter
-     */
-    if (ttyPtr->stateUpdated) {
-	SETIOSTATE(ttyPtr->fs.fd, &ttyPtr->savedState);
-    }
-#endif
-
-    return FileCloseProc(instanceData, interp);
-}
-
 #ifdef USE_TERMIOS
 /*
  *----------------------------------------------------------------------
@@ -840,7 +796,6 @@
 	 */
 
 	TtySetAttributes(fsPtr->fd, &tty);
-	((TtyState *) fsPtr)->stateUpdated = 1;
 	return TCL_OK;
     }
 
@@ -1632,10 +1587,10 @@
     int initialize)
 {
     TtyState *ttyPtr;
+    int stateUpdated = 0;
 
     ttyPtr = (TtyState *) ckalloc((unsigned) sizeof(TtyState));
     GETIOSTATE(fd, &ttyPtr->savedState);
-    ttyPtr->stateUpdated = 0;
     if (initialize) {
 	IOSTATE iostate = ttyPtr->savedState;
 
@@ -1646,7 +1601,7 @@
 		iostate.c_cflag & CREAD ||
 		iostate.c_cc[VMIN] != 1 ||
 		iostate.c_cc[VTIME] != 0) {
-	    ttyPtr->stateUpdated = 1;
+	    stateUpdated = 1;
 	}
 	iostate.c_iflag = IGNBRK;
 	iostate.c_oflag = 0;
@@ -1669,7 +1624,7 @@
 	 * Only update if we're changing anything to avoid possible blocking.
 	 */
 
-	if (ttyPtr->stateUpdated) {
+	if (stateUpdated) {
 	    SETIOSTATE(fd, &iostate);
 	}
     }
