diff options
author | dgp <dgp@users.sourceforge.net> | 2018-10-09 13:51:56 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2018-10-09 13:51:56 (GMT) |
commit | eec0f0f9da09e4ffe2e4daa880ef23835e3d48c0 (patch) | |
tree | 9698dc78e0851ec71411c3b5de28e4969fca8da5 | |
parent | e13c5f55a1b87cdf7eb3f5da7bb71ac0747ee6e0 (diff) | |
parent | cc4dae5c0f418d304a44bb10c87c624b478b6441 (diff) | |
download | tcl-eec0f0f9da09e4ffe2e4daa880ef23835e3d48c0.zip tcl-eec0f0f9da09e4ffe2e4daa880ef23835e3d48c0.tar.gz tcl-eec0f0f9da09e4ffe2e4daa880ef23835e3d48c0.tar.bz2 |
merge 8.6
-rw-r--r-- | generic/tclStubInit.c | 57 | ||||
-rw-r--r-- | win/tclWin32Dll.c | 63 |
2 files changed, 27 insertions, 93 deletions
diff --git a/generic/tclStubInit.c b/generic/tclStubInit.c index b28d501..cbf4084 100644 --- a/generic/tclStubInit.c +++ b/generic/tclStubInit.c @@ -12,6 +12,10 @@ #include "tclInt.h" #include "tommath.h" +#ifdef __CYGWIN__ +# include <wchar.h> +#endif + #ifdef __GNUC__ #pragma GCC dependency "tcl.decls" #pragma GCC dependency "tclInt.decls" @@ -106,10 +110,6 @@ static unsigned short TclWinNToHS(unsigned short ns) { # define TclWinFlushDirtyChannels doNothing # define TclWinResetInterfaces doNothing -#if TCL_UTF_MAX < 4 -static Tcl_Encoding winTCharEncoding; -#endif - static int TclpIsAtty(int fd) { @@ -188,25 +188,11 @@ Tcl_WinUtfToTChar( int len, Tcl_DString *dsPtr) { -#if TCL_UTF_MAX > 3 - WCHAR *wp; - int size = MultiByteToWideChar(CP_UTF8, 0, string, len, 0, 0); - Tcl_DStringInit(dsPtr); - Tcl_DStringSetLength(dsPtr, 2*size+2); - wp = (WCHAR *)Tcl_DStringValue(dsPtr); - MultiByteToWideChar(CP_UTF8, 0, string, len, wp, size+1); - if (len == -1) --size; /* account for 0-byte at string end */ - Tcl_DStringSetLength(dsPtr, 2*size); - wp[size] = 0; - return (char *)wp; -#else - if (!winTCharEncoding) { - winTCharEncoding = Tcl_GetEncoding(0, "unicode"); + if (!string) { + return NULL; } - return Tcl_UtfToExternalDString(winTCharEncoding, - string, len, dsPtr); -#endif + return (char *)Tcl_UtfToUniCharDString(string, len, dsPtr); } char * @@ -215,29 +201,16 @@ Tcl_WinTCharToUtf( int len, Tcl_DString *dsPtr) { -#if TCL_UTF_MAX > 3 - char *p; - int size; - - if (len > 0) { - len /= 2; - } - size = WideCharToMultiByte(CP_UTF8, 0, string, len, 0, 0, NULL, NULL); Tcl_DStringInit(dsPtr); - Tcl_DStringSetLength(dsPtr, size+1); - p = (char *)Tcl_DStringValue(dsPtr); - WideCharToMultiByte(CP_UTF8, 0, string, len, p, size, NULL, NULL); - if (len == -1) --size; /* account for 0-byte at string end */ - Tcl_DStringSetLength(dsPtr, size); - p[size] = 0; - return p; -#else - if (!winTCharEncoding) { - winTCharEncoding = Tcl_GetEncoding(0, "unicode"); + if (!string) { + return NULL; } - return Tcl_ExternalToUtfDString(winTCharEncoding, - string, len, dsPtr); -#endif + if (len < 0) { + len = wcslen((wchar_t *)string); + } else { + len /= 2; + } + return Tcl_UniCharToUtfDString((Tcl_UniChar *)string, len, dsPtr); } #if defined(TCL_WIDE_INT_IS_LONG) diff --git a/win/tclWin32Dll.c b/win/tclWin32Dll.c index a85dd0c..6fc2401 100644 --- a/win/tclWin32Dll.c +++ b/win/tclWin32Dll.c @@ -33,10 +33,6 @@ static int platformId; /* Running under NT, or 95/98? */ #define cpuid __asm __emit 0fh __asm __emit 0a2h #endif -#if TCL_UTF_MAX < 4 -static Tcl_Encoding winTCharEncoding = NULL; -#endif - /* * The following declaration is for the VC++ DLL entry point. */ @@ -201,8 +197,6 @@ TclWinInit( if (platformId == VER_PLATFORM_WIN32_WINDOWS) { Tcl_Panic("Windows 9x is not a supported platform"); } - - TclWinResetInterfaces(); } /* @@ -282,10 +276,6 @@ TclWinNoBackslash( void TclpSetInterfaces(void) { -#if TCL_UTF_MAX < 4 - TclWinResetInterfaces(); - winTCharEncoding = Tcl_GetEncoding(NULL, "unicode"); -#endif } /* @@ -313,8 +303,6 @@ TclWinEncodingsCleanup(void) { MountPointMap *dlIter, *dlIter2; - TclWinResetInterfaces(); - /* * Clean up the mount point map. */ @@ -348,12 +336,6 @@ TclWinEncodingsCleanup(void) void TclWinResetInterfaces(void) { -#if TCL_UTF_MAX < 4 - if (winTCharEncoding != NULL) { - Tcl_FreeEncoding(winTCharEncoding); - winTCharEncoding = NULL; - } -#endif } /* @@ -565,22 +547,11 @@ Tcl_WinUtfToTChar( Tcl_DString *dsPtr) /* Uninitialized or free DString in which the * converted string is stored. */ { -#if TCL_UTF_MAX > 3 - TCHAR *wp; - int size = MultiByteToWideChar(CP_UTF8, 0, string, len, 0, 0); - Tcl_DStringInit(dsPtr); - Tcl_DStringSetLength(dsPtr, 2*size+2); - wp = (TCHAR *)Tcl_DStringValue(dsPtr); - MultiByteToWideChar(CP_UTF8, 0, string, len, wp, size+1); - if (len == -1) --size; /* account for 0-byte at string end */ - Tcl_DStringSetLength(dsPtr, 2*size); - wp[size] = 0; - return wp; -#else - return (TCHAR *) Tcl_UtfToExternalDString(winTCharEncoding, - string, len, dsPtr); -#endif + if (!string) { + return NULL; + } + return Tcl_UtfToUniCharDString(string, len, dsPtr); } char * @@ -591,26 +562,16 @@ Tcl_WinTCharToUtf( Tcl_DString *dsPtr) /* Uninitialized or free DString in which the * converted string is stored. */ { -#if TCL_UTF_MAX > 3 - char *p; - int size; - - if (len > 0) { + Tcl_DStringInit(dsPtr); + if (!string) { + return NULL; + } + if (len < 0) { + len = wcslen(string); + } else { len /= 2; } - size = WideCharToMultiByte(CP_UTF8, 0, string, len, 0, 0, NULL, NULL); - Tcl_DStringInit(dsPtr); - Tcl_DStringSetLength(dsPtr, size+1); - p = (char *)Tcl_DStringValue(dsPtr); - WideCharToMultiByte(CP_UTF8, 0, string, len, p, size, NULL, NULL); - if (len == -1) --size; /* account for 0-byte at string end */ - Tcl_DStringSetLength(dsPtr, size); - p[size] = 0; - return p; -#else - return Tcl_ExternalToUtfDString(winTCharEncoding, - (const char *) string, len, dsPtr); -#endif + return Tcl_UniCharToUtfDString(string, len, dsPtr); } /* |