diff options
| author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2019-09-25 13:42:11 (GMT) |
|---|---|---|
| committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2019-09-25 13:42:11 (GMT) |
| commit | 2c327304a1fe9e05367e2845d7a53d7807325473 (patch) | |
| tree | f52ff2b3681c317f970cc66b9656a920deaf0c2b /generic/tclEncoding.c | |
| parent | 261bde3156d50771907d0e386439fd241874b9eb (diff) | |
| parent | 13f90df6597eb8749645582c67de29865ea50950 (diff) | |
| download | tcl-2c327304a1fe9e05367e2845d7a53d7807325473.zip tcl-2c327304a1fe9e05367e2845d7a53d7807325473.tar.gz tcl-2c327304a1fe9e05367e2845d7a53d7807325473.tar.bz2 | |
Merge 8.7
Diffstat (limited to 'generic/tclEncoding.c')
| -rw-r--r-- | generic/tclEncoding.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/generic/tclEncoding.c b/generic/tclEncoding.c index e7cc344..fbff1f5 100644 --- a/generic/tclEncoding.c +++ b/generic/tclEncoding.c @@ -1515,7 +1515,7 @@ Tcl_FindExecutable( const char *argv0) /* The value of the application's argv[0] * (native). */ { - TclInitSubsystems(); + Tcl_InitSubsystems(); TclpSetInitialEncodings(); TclpFindExecutable(argv0); } @@ -2485,10 +2485,16 @@ Utf16ToUtfProc( charLimit = *dstCharsPtr; } result = TCL_OK; - if ((srcLen % sizeof(unsigned short)) != 0) { + + /* check alignment with utf-16 (2 == sizeof(UTF-16)) */ + if ((srcLen % 2) != 0) { + result = TCL_CONVERT_MULTIBYTE; + srcLen--; + } + /* If last code point is a high surrogate, we cannot handle that yet */ + if ((srcLen >= 2) && ((src[srcLen - (clientData?1:2)] & 0xFC) == 0xD8)) { result = TCL_CONVERT_MULTIBYTE; - srcLen /= sizeof(unsigned short); - srcLen *= sizeof(unsigned short); + srcLen-= 2; } srcStart = src; @@ -3123,6 +3129,7 @@ Iso88591FromUtfProc( const char *srcStart, *srcEnd, *srcClose; const char *dstStart, *dstEnd; int result, numChars; + Tcl_UniChar ch = 0; result = TCL_OK; @@ -3137,7 +3144,6 @@ Iso88591FromUtfProc( dstEnd = dst + dstLen - 1; for (numChars = 0; src < srcEnd; numChars++) { - Tcl_UniChar ch = 0; int len; if ((src > srcClose) && (!Tcl_UtfCharComplete(src, srcEnd - src))) { @@ -3490,6 +3496,7 @@ EscapeFromUtfProc( const TableEncodingData *tableDataPtr; const char *tablePrefixBytes; const unsigned short *const *tableFromUnicode; + Tcl_UniChar ch = 0; result = TCL_OK; @@ -3530,7 +3537,6 @@ EscapeFromUtfProc( for (numChars = 0; src < srcEnd; numChars++) { unsigned len; int word; - Tcl_UniChar ch = 0; if ((src > srcClose) && (!Tcl_UtfCharComplete(src, srcEnd - src))) { /* |
