summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2014-12-23 17:26:07 (GMT)
committerdgp <dgp@users.sourceforge.net>2014-12-23 17:26:07 (GMT)
commit360b5c41eed8a2bc3d2b80f23ca1cdd98fe6e56f (patch)
tree797b3c760758614ad840989e5d44200b5b75d003
parent5a6443d00ed0e3d2c040b88d322ad08a51fcbfc9 (diff)
downloadtcl-360b5c41eed8a2bc3d2b80f23ca1cdd98fe6e56f.zip
tcl-360b5c41eed8a2bc3d2b80f23ca1cdd98fe6e56f.tar.gz
tcl-360b5c41eed8a2bc3d2b80f23ca1cdd98fe6e56f.tar.bz2
Support TCL_ENCODING_CHAR_LIMIT in the UtfToUtfProc driver.
-rw-r--r--generic/tclEncoding.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/generic/tclEncoding.c b/generic/tclEncoding.c
index 5c5254b..f92cabb 100644
--- a/generic/tclEncoding.c
+++ b/generic/tclEncoding.c
@@ -2294,7 +2294,7 @@ UtfToUtfProc(
{
const char *srcStart, *srcEnd, *srcClose;
const char *dstStart, *dstEnd;
- int result, numChars;
+ int result, numChars, charLimit = INT_MAX;
Tcl_UniChar ch;
result = TCL_OK;
@@ -2305,11 +2305,14 @@ UtfToUtfProc(
if ((flags & TCL_ENCODING_END) == 0) {
srcClose -= TCL_UTF_MAX;
}
+ if (flags & TCL_ENCODING_CHAR_LIMIT) {
+ charLimit = *dstCharsPtr;
+ }
dstStart = dst;
dstEnd = dst + dstLen - TCL_UTF_MAX;
- for (numChars = 0; src < srcEnd; numChars++) {
+ for (numChars = 0; src < srcEnd && numChars <= charLimit; numChars++) {
if ((src > srcClose) && (!Tcl_UtfCharComplete(src, srcEnd - src))) {
/*
* If there is more string to follow, this will ensure that the