diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2020-05-25 09:32:13 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2020-05-25 09:32:13 (GMT) |
commit | 53e89dcb06d57874c1fd1aff0bca30a01f351cc0 (patch) | |
tree | 4e258563dbd69db853bfaa850d7a82737c432960 /generic/tclUtf.c | |
parent | 6de32c896abb44a00ad7368892924e9c9de5db11 (diff) | |
parent | d3eb8cf5e3d7b1535ba73e95dee737c08a36d3bb (diff) | |
download | tcl-53e89dcb06d57874c1fd1aff0bca30a01f351cc0.zip tcl-53e89dcb06d57874c1fd1aff0bca30a01f351cc0.tar.gz tcl-53e89dcb06d57874c1fd1aff0bca30a01f351cc0.tar.bz2 |
Fix compiled "string is <class>" for characters > U+FFFF. Add testcase exposing this bug.
Diffstat (limited to 'generic/tclUtf.c')
-rw-r--r-- | generic/tclUtf.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/generic/tclUtf.c b/generic/tclUtf.c index 2eb959e..11bde5c 100644 --- a/generic/tclUtf.c +++ b/generic/tclUtf.c @@ -2621,6 +2621,20 @@ TclUtfToUCS4( /* Make use of the #undef Tcl_UtfToUniChar above, which already handles UCS4. */ return Tcl_UtfToUniChar(src, ucs4Ptr); } + +int +TclUniCharToUCS4( + const Tcl_UniChar *src, /* The Tcl_UniChar string. */ + int *ucs4Ptr) /* Filled with the UCS4 codepoint represented + * by the Tcl_UniChar string. */ +{ + if (((src[0] & 0xFC00) == 0xD800) && ((src[1] & 0xFC00) == 0xDC00)) { + *ucs4Ptr = (((src[0] & 0x3FF) << 10) | (src[01] & 0x3FF)) + 0x10000; + return 2; + } + *ucs4Ptr = src[0]; + return 1; +} #endif /* |