summaryrefslogtreecommitdiffstats
path: root/generic/tclEncoding.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2015-09-22 08:20:03 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2015-09-22 08:20:03 (GMT)
commit5420a19e5c690cb9c96babceac44c26ff6f2167d (patch)
tree09d42b476605f7860fbaebb136d4f8e144f14159 /generic/tclEncoding.c
parent68d8dd01a2433624b814b9b3fa5a2a7438d4e547 (diff)
parent256865fe128c764644470f0250d960bdf1d51925 (diff)
downloadtcl-5420a19e5c690cb9c96babceac44c26ff6f2167d.zip
tcl-5420a19e5c690cb9c96babceac44c26ff6f2167d.tar.gz
tcl-5420a19e5c690cb9c96babceac44c26ff6f2167d.tar.bz2
merge trunk
Diffstat (limited to 'generic/tclEncoding.c')
-rw-r--r--generic/tclEncoding.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/generic/tclEncoding.c b/generic/tclEncoding.c
index 501fc57..b832d02 100644
--- a/generic/tclEncoding.c
+++ b/generic/tclEncoding.c
@@ -2463,22 +2463,35 @@ UtfToUnicodeProc(
if (dst > dstEnd) {
result = TCL_CONVERT_NOSPACE;
break;
- }
+ }
src += TclUtfToUniChar(src, &ch);
/*
* Need to handle this in a way that won't cause misalignment by
* casting dst to a Tcl_UniChar. [Bug 1122671]
- * XXX: This hard-codes the assumed size of Tcl_UniChar as 2.
*/
#ifdef WORDS_BIGENDIAN
+#if TCL_UTF_MAX > 4
+ *dst++ = (ch >> 24);
+ *dst++ = ((ch >> 16) & 0xFF);
+ *dst++ = ((ch >> 8) & 0xFF);
+ *dst++ = (ch & 0xFF);
+#else
*dst++ = (ch >> 8);
*dst++ = (ch & 0xFF);
+#endif
+#else
+#if TCL_UTF_MAX > 4
+ *dst++ = (ch & 0xFF);
+ *dst++ = ((ch >> 8) & 0xFF);
+ *dst++ = ((ch >> 16) & 0xFF);
+ *dst++ = (ch >> 24);
#else
*dst++ = (ch & 0xFF);
*dst++ = (ch >> 8);
#endif
+#endif
}
*srcReadPtr = src - srcStart;
*dstWrotePtr = dst - dstStart;