diff options
Diffstat (limited to 'generic/tclStubInit.c')
-rw-r--r-- | generic/tclStubInit.c | 73 |
1 files changed, 38 insertions, 35 deletions
diff --git a/generic/tclStubInit.c b/generic/tclStubInit.c index 09994b9..cbb89a2 100644 --- a/generic/tclStubInit.c +++ b/generic/tclStubInit.c @@ -55,25 +55,34 @@ Tcl_NotifierProcs tclOriginalNotifier = { NULL }; -#ifdef _WIN64 /* See bug 510001: TclSockMinimumBuffers needs plat imp */ -# undef TclSockMinimumBuffers -# define TclSockMinimumBuffers ((int (*)(int, int)) \ - TclSockMinimumBuffersWin64) +#ifdef _WIN64 +# define TclSockMinimumBuffersOld 0 +#else +int TclSockMinimumBuffersOld(sock, size) + int sock; + int size; +{ + return TclSockMinimumBuffers((void *) (size_t) sock, size); +} #endif #ifdef __CYGWIN__ +/* Trick, so we don't have to include <windows.h> here, which + * - b.t.w. - lacks this function anyway */ +#define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 0x00000004 +int __stdcall GetModuleHandleExW(unsigned int, const char *, void *); + #define TclWinGetPlatformId winGetPlatformId #define Tcl_WinUtfToTChar winUtfToTChar #define Tcl_WinTCharToUtf winTCharToUtf #define TclWinGetTclInstance winGetTclInstance #define TclWinNToHS winNToHS #define TclWinSetSockOpt winSetSockOpt -#define TclWinAddProcess winAddProcess -#define TclpGetTZName pGetTZName #define TclWinNoBackslash winNoBackslash -#define TclWinSetInterfaces (void (*) _ANSI_ARGS_((int))) doNothing +#define TclWinSetInterfaces (void (*) (int)) doNothing +#define TclWinAddProcess (void (*) (void *, unsigned int)) doNothing #define TclWinFlushDirtyChannels doNothing #define TclWinResetInterfaces doNothing @@ -87,38 +96,25 @@ TclWinGetPlatformId() return 2; /* VER_PLATFORM_WIN32_NT */; } -static int TclWinGetTclInstance() +static void *TclWinGetTclInstance() { - Tcl_Panic("TclWinGetTclInstance not yet implemented for CYGWIN"); - return 0; + void *hInstance = NULL; + GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, + (const char *)&winTCharEncoding, &hInstance); + return hInstance; } static unsigned short TclWinNToHS(unsigned short ns) { - Tcl_Panic("TclWinNToHS not yet implemented for CYGWIN"); - return (unsigned short) -1; + return ntohs(ns); } + static int -TclWinSetSockOpt(int s, int level, int optname, +TclWinSetSockOpt(void *s, int level, int optname, const char *optval, int optlen) { - Tcl_Panic("TclWinSetSockOpt not yet implemented for CYGWIN"); - return -1; -} - -static void -TclWinAddProcess(void *hProcess, unsigned long id) -{ - Tcl_Panic("TclWinAddProcess not yet implemented for CYGWIN"); -} - -static char * -TclpGetTZName(int isdst) -{ - /* TODO: implementation */ - Tcl_Panic("TclpGetTZName not yet implemented for CYGWIN"); - return 0; + return setsockopt((int) s, level, optname, optval, optlen); } static char * @@ -182,11 +178,10 @@ Tcl_WinTCharToUtf( # define TclWinConvertError (void (*) _ANSI_ARGS_((unsigned int))) TclGetAndDetachPids # define TclWinConvertWSAError (void (*) _ANSI_ARGS_((unsigned int))) TclpCloseFile # define TclWinGetPlatformId (int (*)()) TclpCreateTempFile -# define TclWinGetTclInstance (int (*)()) TclpCreateProcess +# define TclWinGetTclInstance (void *(*)()) TclpCreateProcess # define TclWinNToHS (unsigned short (*) _ANSI_ARGS_((unsigned short ns))) TclpMakeFile -# define TclWinSetSockOpt (int (*) _ANSI_ARGS_((int, int, int, const char *, int))) TclpOpenFile +# define TclWinSetSockOpt (int (*) _ANSI_ARGS_((void *, int, int, const char *, int))) TclpOpenFile # define TclWinAddProcess 0 -# define TclpGetTZName 0 # define TclWinNoBackslash 0 # define TclWinSetInterfaces 0 # define TclWinFlushDirtyChannels 0 @@ -334,10 +329,10 @@ TclIntStubs tclIntStubs = { TclSetupEnv, /* 102 */ TclSockGetPort, /* 103 */ #if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */ - TclSockMinimumBuffers, /* 104 */ + TclSockMinimumBuffersOld, /* 104 */ #endif /* UNIX */ #ifdef __WIN32__ - TclSockMinimumBuffers, /* 104 */ + TclSockMinimumBuffersOld, /* 104 */ #endif /* __WIN32__ */ #ifdef MAC_TCL NULL, /* 104 */ @@ -347,7 +342,15 @@ TclIntStubs tclIntStubs = { TclStatInsertProc, /* 107 */ TclTeardownNamespace, /* 108 */ TclUpdateReturnInfo, /* 109 */ +#if !defined(__WIN32__) && !defined(MAC_TCL) /* UNIX */ + TclSockMinimumBuffers, /* 110 */ +#endif /* UNIX */ +#ifdef __WIN32__ + TclSockMinimumBuffers, /* 110 */ +#endif /* __WIN32__ */ +#ifdef MAC_TCL NULL, /* 110 */ +#endif /* MAC_TCL */ Tcl_AddInterpResolvers, /* 111 */ Tcl_AppendExportList, /* 112 */ Tcl_CreateNamespace, /* 113 */ @@ -466,7 +469,7 @@ TclIntPlatStubs tclIntPlatStubs = { TclWinAddProcess, /* 20 */ NULL, /* 21 */ TclpCreateTempFile, /* 22 */ - TclpGetTZName, /* 23 */ + NULL, /* 23 */ TclWinNoBackslash, /* 24 */ NULL, /* 25 */ TclWinSetInterfaces, /* 26 */ |