diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2017-05-05 13:55:47 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2017-05-05 13:55:47 (GMT) |
commit | fe2b88f2782fc8a4d6a9d7beda9900501f1548fd (patch) | |
tree | 62352d8b850165c0596647d8c111cbe3a2fbfd32 /win/tkWinInit.c | |
parent | ba7ccfc695ea0f53f4afb2165fca6783d7dcfcd7 (diff) | |
download | tk-fe2b88f2782fc8a4d6a9d7beda9900501f1548fd.zip tk-fe2b88f2782fc8a4d6a9d7beda9900501f1548fd.tar.gz tk-fe2b88f2782fc8a4d6a9d7beda9900501f1548fd.tar.bz2 |
On Windows, use Tcl_WinTCharToUtf() in stead of Tcl_NewUnicodeObj(), since Tcl_WinTCharToUtf() works correctly when TCL_UTF_MAX==6 while Tcl_NewUnicodeObj() doesn't.
All changes taken over from androwish. Thanks to Christian Werner!
And ... on the go ... fixed a few memory leaks correctly detected by Christian.
Diffstat (limited to 'win/tkWinInit.c')
-rw-r--r-- | win/tkWinInit.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/win/tkWinInit.c b/win/tkWinInit.c index b1b2d6b..4c18399 100644 --- a/win/tkWinInit.c +++ b/win/tkWinInit.c @@ -181,6 +181,9 @@ TkWin32ErrorObj( LPTSTR lpBuffer = NULL, p = NULL; TCHAR sBuffer[30]; Tcl_Obj* errPtr = NULL; +#ifdef _UNICODE + Tcl_DString ds; +#endif FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, (DWORD)hrError, @@ -196,7 +199,9 @@ TkWin32ErrorObj( } #ifdef _UNICODE - errPtr = Tcl_NewUnicodeObj(lpBuffer, (int)wcslen(lpBuffer)); + Tcl_WinTCharToUtf(lpBuffer, (int)wcslen(lpBuffer) * sizeof (WCHAR), &ds); + errPtr = Tcl_NewStringObj(Tcl_DStringValue(&ds), Tcl_DStringLength(&ds)); + Tcl_DStringFree(&ds); #else errPtr = Tcl_NewStringObj(lpBuffer, (int)strlen(lpBuffer)); #endif /* _UNICODE */ |