diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | generic/tclIOSock.c | 15 | ||||
-rw-r--r-- | generic/tclInt.decls | 5 | ||||
-rw-r--r-- | generic/tclIntDecls.h | 71 | ||||
-rw-r--r-- | generic/tclStubInit.c | 24 | ||||
-rw-r--r-- | win/tclWinSock.c | 18 |
6 files changed, 110 insertions, 31 deletions
@@ -1,3 +1,11 @@ +2012-04-04 Jan Nijtmans <nijtmans@users.sf.net> + + * win/tclWinSock.c: [Bug 510001]: TclSockMinimumBuffers needs plat imp + * generic/tclIOSock.c: + * generic/tclInt.decls: + * generic/tclIntDecls.h: + * generic/tclStubInit.c: + 2012-04-03 Jan Nijtmans <nijtmans@users.sf.net> * generic/tclStubInit.c Remove the TclpGetTZName implementation for diff --git a/generic/tclIOSock.c b/generic/tclIOSock.c index ec4a9d9..7233646 100644 --- a/generic/tclIOSock.c +++ b/generic/tclIOSock.c @@ -81,25 +81,30 @@ TclSockGetPort( *---------------------------------------------------------------------- */ +#undef TclSockMinimumBuffers +#ifndef _WIN32 +# define SOCKET int +#endif + int TclSockMinimumBuffers( - int sock, /* Socket file descriptor */ + void *sock, /* Socket file descriptor */ int size) /* Minimum buffer size */ { int current; socklen_t len; len = sizeof(int); - getsockopt(sock, SOL_SOCKET, SO_SNDBUF, (char *)¤t, &len); + getsockopt((SOCKET)sock, SOL_SOCKET, SO_SNDBUF, (char *)¤t, &len); if (current < size) { len = sizeof(int); - setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (char *)&size, len); + setsockopt((SOCKET)sock, SOL_SOCKET, SO_SNDBUF, (char *)&size, len); } len = sizeof(int); - getsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *)¤t, &len); + getsockopt((SOCKET)sock, SOL_SOCKET, SO_RCVBUF, (char *)¤t, &len); if (current < size) { len = sizeof(int); - setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *)&size, len); + setsockopt((SOCKET)sock, SOL_SOCKET, SO_RCVBUF, (char *)&size, len); } return TCL_OK; } diff --git a/generic/tclInt.decls b/generic/tclInt.decls index 71615ec..ac2d84b 100644 --- a/generic/tclInt.decls +++ b/generic/tclInt.decls @@ -419,7 +419,10 @@ declare 103 { int *portPtr) } declare 104 { - int TclSockMinimumBuffers(int sock, int size) + int TclSockMinimumBuffersOld(int sock, int size) +} +declare 110 {unix win} { + int TclSockMinimumBuffers(void *sock, int size) } # Replaced by Tcl_FSStat in 8.4: #declare 105 { diff --git a/generic/tclIntDecls.h b/generic/tclIntDecls.h index fb63ec0..6be7f94 100644 --- a/generic/tclIntDecls.h +++ b/generic/tclIntDecls.h @@ -438,10 +438,10 @@ EXTERN void TclSetupEnv(Tcl_Interp *interp); EXTERN int TclSockGetPort(Tcl_Interp *interp, CONST char *str, CONST char *proto, int *portPtr); #endif -#ifndef TclSockMinimumBuffers_TCL_DECLARED -#define TclSockMinimumBuffers_TCL_DECLARED +#ifndef TclSockMinimumBuffersOld_TCL_DECLARED +#define TclSockMinimumBuffersOld_TCL_DECLARED /* 104 */ -EXTERN int TclSockMinimumBuffers(int sock, int size); +EXTERN int TclSockMinimumBuffersOld(int sock, int size); #endif /* Slot 105 is reserved */ /* Slot 106 is reserved */ @@ -456,7 +456,27 @@ EXTERN void TclTeardownNamespace(Namespace *nsPtr); /* 109 */ EXTERN int TclUpdateReturnInfo(Interp *iPtr); #endif -/* Slot 110 is reserved */ +#if !defined(__WIN32__) && !defined(MAC_OSX_TCL) /* UNIX */ +#ifndef TclSockMinimumBuffers_TCL_DECLARED +#define TclSockMinimumBuffers_TCL_DECLARED +/* 110 */ +EXTERN int TclSockMinimumBuffers(VOID *sock, int size); +#endif +#endif /* UNIX */ +#ifdef __WIN32__ /* WIN */ +#ifndef TclSockMinimumBuffers_TCL_DECLARED +#define TclSockMinimumBuffers_TCL_DECLARED +/* 110 */ +EXTERN int TclSockMinimumBuffers(VOID *sock, int size); +#endif +#endif /* WIN */ +#ifdef MAC_OSX_TCL /* MACOSX */ +#ifndef TclSockMinimumBuffers_TCL_DECLARED +#define TclSockMinimumBuffers_TCL_DECLARED +/* 110 */ +EXTERN int TclSockMinimumBuffers(VOID *sock, int size); +#endif +#endif /* MACOSX */ #ifndef Tcl_AddInterpResolvers_TCL_DECLARED #define Tcl_AddInterpResolvers_TCL_DECLARED /* 111 */ @@ -1158,13 +1178,21 @@ typedef struct TclIntStubs { char * (*tclSetPreInitScript) (char *string); /* 101 */ void (*tclSetupEnv) (Tcl_Interp *interp); /* 102 */ int (*tclSockGetPort) (Tcl_Interp *interp, CONST char *str, CONST char *proto, int *portPtr); /* 103 */ - int (*tclSockMinimumBuffers) (int sock, int size); /* 104 */ + int (*tclSockMinimumBuffersOld) (int sock, int size); /* 104 */ VOID *reserved105; VOID *reserved106; VOID *reserved107; void (*tclTeardownNamespace) (Namespace *nsPtr); /* 108 */ int (*tclUpdateReturnInfo) (Interp *iPtr); /* 109 */ - VOID *reserved110; +#if !defined(__WIN32__) && !defined(MAC_OSX_TCL) /* UNIX */ + int (*tclSockMinimumBuffers) (VOID *sock, int size); /* 110 */ +#endif /* UNIX */ +#ifdef __WIN32__ /* WIN */ + int (*tclSockMinimumBuffers) (VOID *sock, int size); /* 110 */ +#endif /* WIN */ +#ifdef MAC_OSX_TCL /* MACOSX */ + int (*tclSockMinimumBuffers) (VOID *sock, int size); /* 110 */ +#endif /* MACOSX */ void (*tcl_AddInterpResolvers) (Tcl_Interp *interp, CONST char *name, Tcl_ResolveCmdProc *cmdProc, Tcl_ResolveVarProc *varProc, Tcl_ResolveCompiledVarProc *compiledVarProc); /* 111 */ int (*tcl_AppendExportList) (Tcl_Interp *interp, Tcl_Namespace *nsPtr, Tcl_Obj *objPtr); /* 112 */ Tcl_Namespace * (*tcl_CreateNamespace) (Tcl_Interp *interp, CONST char *name, ClientData clientData, Tcl_NamespaceDeleteProc *deleteProc); /* 113 */ @@ -1598,9 +1626,9 @@ extern TclIntStubs *tclIntStubsPtr; #define TclSockGetPort \ (tclIntStubsPtr->tclSockGetPort) /* 103 */ #endif -#ifndef TclSockMinimumBuffers -#define TclSockMinimumBuffers \ - (tclIntStubsPtr->tclSockMinimumBuffers) /* 104 */ +#ifndef TclSockMinimumBuffersOld +#define TclSockMinimumBuffersOld \ + (tclIntStubsPtr->tclSockMinimumBuffersOld) /* 104 */ #endif /* Slot 105 is reserved */ /* Slot 106 is reserved */ @@ -1613,7 +1641,24 @@ extern TclIntStubs *tclIntStubsPtr; #define TclUpdateReturnInfo \ (tclIntStubsPtr->tclUpdateReturnInfo) /* 109 */ #endif -/* Slot 110 is reserved */ +#if !defined(__WIN32__) && !defined(MAC_OSX_TCL) /* UNIX */ +#ifndef TclSockMinimumBuffers +#define TclSockMinimumBuffers \ + (tclIntStubsPtr->tclSockMinimumBuffers) /* 110 */ +#endif +#endif /* UNIX */ +#ifdef __WIN32__ /* WIN */ +#ifndef TclSockMinimumBuffers +#define TclSockMinimumBuffers \ + (tclIntStubsPtr->tclSockMinimumBuffers) /* 110 */ +#endif +#endif /* WIN */ +#ifdef MAC_OSX_TCL /* MACOSX */ +#ifndef TclSockMinimumBuffers +#define TclSockMinimumBuffers \ + (tclIntStubsPtr->tclSockMinimumBuffers) /* 110 */ +#endif +#endif /* MACOSX */ #ifndef Tcl_AddInterpResolvers #define Tcl_AddInterpResolvers \ (tclIntStubsPtr->tcl_AddInterpResolvers) /* 111 */ @@ -2037,6 +2082,12 @@ extern TclIntStubs *tclIntStubsPtr; /* !END!: Do not edit above this line. */ +#if !defined(_WIN64) +/* See bug 510001: TclSockMinimumBuffers needs plat imp */ +# undef TclSockMinimumBuffers +# define TclSockMinimumBuffers(a,b) TclSockMinimumBuffersOld(PTR2INT(a),b) +#endif + #undef TCL_STORAGE_CLASS #define TCL_STORAGE_CLASS DLLIMPORT diff --git a/generic/tclStubInit.c b/generic/tclStubInit.c index 4c70f00..dfdc79a 100644 --- a/generic/tclStubInit.c +++ b/generic/tclStubInit.c @@ -55,6 +55,18 @@ Tcl_NotifierProcs tclOriginalNotifier = { NULL }; +/* See bug 510001: TclSockMinimumBuffers needs plat imp */ +#ifdef _WIN64 +# define TclSockMinimumBuffersOld 0 +#else +int TclSockMinimumBuffersOld(sock, size) + int sock; + int size; +{ + return TclSockMinimumBuffers((void *) (size_t) sock, size); +} +#endif + MODULE_SCOPE TclIntStubs tclIntStubs; MODULE_SCOPE TclIntPlatStubs tclIntPlatStubs; MODULE_SCOPE TclPlatStubs tclPlatStubs; @@ -306,13 +318,21 @@ TclIntStubs tclIntStubs = { TclSetPreInitScript, /* 101 */ TclSetupEnv, /* 102 */ TclSockGetPort, /* 103 */ - TclSockMinimumBuffers, /* 104 */ + TclSockMinimumBuffersOld, /* 104 */ NULL, /* 105 */ NULL, /* 106 */ NULL, /* 107 */ TclTeardownNamespace, /* 108 */ TclUpdateReturnInfo, /* 109 */ - NULL, /* 110 */ +#if !defined(__WIN32__) && !defined(MAC_OSX_TCL) /* UNIX */ + TclSockMinimumBuffers, /* 110 */ +#endif /* UNIX */ +#ifdef __WIN32__ /* WIN */ + TclSockMinimumBuffers, /* 110 */ +#endif /* WIN */ +#ifdef MAC_OSX_TCL /* MACOSX */ + TclSockMinimumBuffers, /* 110 */ +#endif /* MACOSX */ Tcl_AddInterpResolvers, /* 111 */ Tcl_AppendExportList, /* 112 */ Tcl_CreateNamespace, /* 113 */ diff --git a/win/tclWinSock.c b/win/tclWinSock.c index 2973db1..019d8e9 100644 --- a/win/tclWinSock.c +++ b/win/tclWinSock.c @@ -968,7 +968,7 @@ CreateSocket( * Set kernel space buffering */ - TclSockMinimumBuffers((int) sock, TCP_BUFFER_SIZE); + TclSockMinimumBuffers((void *)sock, TCP_BUFFER_SIZE); if (server) { /* @@ -1326,7 +1326,7 @@ Tcl_MakeTcpClientChannel( * Set kernel space buffering and non-blocking. */ - TclSockMinimumBuffers(PTR2INT(sock), TCP_BUFFER_SIZE); + TclSockMinimumBuffers(sock, TCP_BUFFER_SIZE); infoPtr = NewSocketInfo((SOCKET) sock); @@ -2479,12 +2479,8 @@ InitializeHostName( */ int -TclWinGetSockOpt( - SOCKET s, - int level, - int optname, - char * optval, - int FAR *optlen) +TclWinGetSockOpt(SOCKET s, int level, int optname, char *optval, + int *optlen) { /* * Check that WinSock is initialized; do not call it if not, to prevent @@ -2500,11 +2496,7 @@ TclWinGetSockOpt( } int -TclWinSetSockOpt( - SOCKET s, - int level, - int optname, - const char * optval, +TclWinSetSockOpt(SOCKET s, int level, int optname, const char *optval, int optlen) { /* |