summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--generic/tclIOSock.c15
-rw-r--r--generic/tclInt.decls5
-rw-r--r--generic/tclIntDecls.h71
-rw-r--r--generic/tclStubInit.c24
-rw-r--r--win/tclWinSock.c18
6 files changed, 110 insertions, 31 deletions
diff --git a/ChangeLog b/ChangeLog
index 5239d7f..75b90f3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 *)&current, &len);
+ getsockopt((SOCKET)sock, SOL_SOCKET, SO_SNDBUF, (char *)&current, &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 *)&current, &len);
+ getsockopt((SOCKET)sock, SOL_SOCKET, SO_RCVBUF, (char *)&current, &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)
{
/*