diff options
| author | andreask@activestate.com <andreas_kupries> | 2003-10-23 18:00:08 (GMT) | 
|---|---|---|
| committer | andreask@activestate.com <andreas_kupries> | 2003-10-23 18:00:08 (GMT) | 
| commit | a3c8259c33e1eeb1d7efb6cd3fc5600aa4a35d18 (patch) | |
| tree | 40ff3cac4c93261e8edf98b1de44da11cc5a9862 /unix/tclUnixChan.c | |
| parent | fd73cc06f780cfaf753351f740a7a377132c686e (diff) | |
| download | tcl-a3c8259c33e1eeb1d7efb6cd3fc5600aa4a35d18.zip tcl-a3c8259c33e1eeb1d7efb6cd3fc5600aa4a35d18.tar.gz tcl-a3c8259c33e1eeb1d7efb6cd3fc5600aa4a35d18.tar.bz2  | |
	* unix/tclUnixChan.c (Tcl_MakeFileChannel): Applied [Patch 813606]
	  fixing [Bug 813087]. Detection of sockets was off for Mac OS X
	  which implements pipes as local sockets. The new code ensures
	  that only IP sockets are detected as such.
Diffstat (limited to 'unix/tclUnixChan.c')
| -rw-r--r-- | unix/tclUnixChan.c | 13 | 
1 files changed, 8 insertions, 5 deletions
diff --git a/unix/tclUnixChan.c b/unix/tclUnixChan.c index 133e44f..bb2b9c0 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.42 2003/02/21 02:36:27 hobbs Exp $ + * RCS: @(#) $Id: tclUnixChan.c,v 1.43 2003/10/23 18:00:10 andreas_kupries Exp $   */  #include "tclInt.h"	/* Internal definitions for Tcl. */ @@ -1889,8 +1889,8 @@ Tcl_MakeFileChannel(handle, mode)  #ifdef DEPRECATED      ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);  #endif /* DEPRECATED */ -    int socketType = 0; -    socklen_t argLength = sizeof(int); +    struct sockaddr sockaddr; +    socklen_t sockaddrLen = sizeof(sockaddr);      if (mode == 0) {  	return NULL; @@ -1911,6 +1911,8 @@ Tcl_MakeFileChannel(handle, mode)      }  #endif /* DEPRECATED */ +    sockaddr.sa_family = AF_UNSPEC; +  #ifdef SUPPORTS_TTY      if (isatty(fd)) {  	fsPtr = TtyInit(fd, 0); @@ -1918,8 +1920,9 @@ Tcl_MakeFileChannel(handle, mode)  	sprintf(channelName, "serial%d", fd);      } else  #endif /* SUPPORTS_TTY */ -    if (getsockopt(fd, SOL_SOCKET, SO_TYPE, (VOID *)&socketType, -		   &argLength) == 0  &&	 socketType == SOCK_STREAM) { +    if (getsockname(fd, (struct sockaddr *)&sockaddr, &sockaddrLen) == 0 +            && sockaddrLen > 0 +            && sockaddr.sa_family == AF_INET) {  	return MakeTcpClientChannelMode((ClientData) fd, mode);      } else {  	channelTypePtr = &fileChannelType;  | 
