From 63502e3b41a71f30f2249e251395fcf7a4ef96c8 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 26 Jun 2019 21:03:21 +0000 Subject: Add compatibility macro's for Tcl_WinUtfToTChar/Tcl_WinTCharToUtf --- generic/tclPlatDecls.h | 9 ++++++++- generic/tclStubInit.c | 8 +++----- win/tclWin32Dll.c | 3 ++- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/generic/tclPlatDecls.h b/generic/tclPlatDecls.h index f44e639..2265d80 100644 --- a/generic/tclPlatDecls.h +++ b/generic/tclPlatDecls.h @@ -117,10 +117,17 @@ extern const TclPlatStubs *tclPlatStubsPtr; #undef TCL_STORAGE_CLASS #define TCL_STORAGE_CLASS DLLIMPORT -#if defined(USE_TCL_STUBS) && (defined(_WIN32) || defined(__CYGWIN__)) \ +#if defined(USE_TCL_STUBS) && defined(_WIN32) \ && ((TCL_UTF_MAX > 4) || defined(TCL_NO_DEPRECATED)) #undef Tcl_WinUtfToTChar #undef Tcl_WinTCharToUtf + +#define Tcl_WinUtfToTChar(string, len, dsPtr) (((string) != NULL) \ + ? (Tcl_DStringInit(dsPtr), (TCHAR *)Tcl_UtfToUtf16DString((string), (len), (dsPtr))) \ + : (Tcl_DStringInit(dsPtr), (void)(len), NULL)) +#define Tcl_WinTCharToUtf(string, len, dsPtr) (((string) != NULL) \ + ? (Tcl_DStringInit(dsPtr), (char *)Tcl_Utf16ToUtfDString((string), ((int)(len) >> 1), (dsPtr))) \ + : (Tcl_DStringInit(dsPtr), (void)(len), NULL)) #endif diff --git a/generic/tclStubInit.c b/generic/tclStubInit.c index 17c68c1..17076fd 100644 --- a/generic/tclStubInit.c +++ b/generic/tclStubInit.c @@ -259,6 +259,7 @@ TclpGetPid(Tcl_Pid pid) } #if (TCL_UTF_MAX <= 4) && !defined(TCL_NO_DEPRECATED) +#undef Tcl_WinUtfToTChar char * Tcl_WinUtfToTChar( const char *string, @@ -271,7 +272,7 @@ Tcl_WinUtfToTChar( } return (char *)Tcl_UtfToUtf16DString(string, len, dsPtr); } - +#undef Tcl_WinTCharToUtf char * Tcl_WinTCharToUtf( const char *string, @@ -282,10 +283,7 @@ Tcl_WinTCharToUtf( if (!string) { return NULL; } - if (len > 0) { - len /= 2; - } - return Tcl_Utf16ToUtfDString((const unsigned short *)string, len, dsPtr); + return Tcl_Utf16ToUtfDString((const unsigned short *)string, len >> 1, dsPtr); } #endif /* !defined(TCL_NO_DEPRECATED) */ diff --git a/win/tclWin32Dll.c b/win/tclWin32Dll.c index 4867c24..fc97cba 100644 --- a/win/tclWin32Dll.c +++ b/win/tclWin32Dll.c @@ -464,6 +464,7 @@ TclWinDriveLetterForVolMountPoint( */ #if (TCL_UTF_MAX <= 4) && !defined(TCL_NO_DEPRECATED) +#undef Tcl_WinUtfToTChar WCHAR * Tcl_WinUtfToTChar( const char *string, /* Source string in UTF-8. */ @@ -478,7 +479,7 @@ Tcl_WinUtfToTChar( } return Tcl_UtfToUtf16DString(string, len, dsPtr); } - +#undef Tcl_WinTCharToUtf char * Tcl_WinTCharToUtf( const WCHAR *string, /* Source string in Unicode. */ -- cgit v0.12