summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--unix/tclUnixChan.c24
2 files changed, 18 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index 0bcb8f8..74294fb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-01-26 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * unix/tclUnixChan.c (TclpOpenFileChannel): Tidy up and comment the
+ mess to do with setting up serial channels. This (deliberately) breaks
+ a broken FreeBSD port, indicates what we're really doing, and reduces
+ the amount of conditional compilation sections for better maintenance.
+
2006-01-25 Donal K. Fellows <dkf@users.sf.net>
* unix/tclUnixInit.c (TclpInitPlatform): Improved conditions on when
diff --git a/unix/tclUnixChan.c b/unix/tclUnixChan.c
index 42dbcbe..8fa09e5 100644
--- a/unix/tclUnixChan.c
+++ b/unix/tclUnixChan.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tclUnixChan.c,v 1.64 2005/11/27 02:33:50 das Exp $
+ * RCS: @(#) $Id: tclUnixChan.c,v 1.65 2006/01/26 09:30:52 dkf Exp $
*/
#include "tclInt.h" /* Internal definitions for Tcl. */
@@ -1766,9 +1766,6 @@ TclpOpenFileChannel(
CONST char *native, *translation;
char channelName[16 + TCL_INTEGER_SPACE];
Tcl_ChannelType *channelTypePtr;
-#ifdef SUPPORTS_TTY
- int ctl_tty;
-#endif /* SUPPORTS_TTY */
switch (mode & (O_RDONLY | O_WRONLY | O_RDWR)) {
case O_RDONLY:
@@ -1800,15 +1797,10 @@ TclpOpenFileChannel(
fd = TclOSopen(native, mode, permissions);
-#ifdef SUPPORTS_TTY
- ctl_tty = (strcmp(native, "/dev/tty") == 0);
-#endif /* SUPPORTS_TTY */
-
if (fd < 0) {
if (interp != NULL) {
- Tcl_AppendResult(interp, "couldn't open \"",
- TclGetString(pathPtr), "\": ", Tcl_PosixError(interp),
- NULL);
+ Tcl_AppendResult(interp, "couldn't open \"", TclGetString(pathPtr),
+ "\": ", Tcl_PosixError(interp), NULL);
}
return NULL;
}
@@ -1823,13 +1815,19 @@ TclpOpenFileChannel(
sprintf(channelName, "file%d", fd);
#ifdef SUPPORTS_TTY
- if (!ctl_tty && isatty(fd)) {
+ if (strcmp(native, "/dev/tty") != 0 && isatty(fd)) {
/*
- * Initialize the serial port to a set of sane parameters. Especially
+ * Initialize the serial port to a set of sane parameters. Especially
* important if the remote device is set to echo and the serial port
* driver was also set to echo -- as soon as a char were sent to the
* serial port, the remote device would echo it, then the serial
* driver would echo it back to the device, etc.
+ *
+ * Note that we do not do this if we're dealing with /dev/tty itself,
+ * as that tends to cause Bad Things To Happen when you're working
+ * interactively. Strictly a better check would be to see if the FD
+ * being set up is a device and has the same major/minor as the
+ * initial std FDs (beware reopening!) but that's nearly as messy.
*/
translation = "auto crlf";