Skip to content

Commit

Permalink
minor bug-fix in utf-16/utf-32: 2 testcases failed in Tcl 9 compatibi…
Browse files Browse the repository at this point in the history
…lity mode (-DTCL_NO_DEPRECATED)
  • Loading branch information
jan.nijtmans committed Feb 22, 2023
1 parent 1ac875d commit 6c75773
Showing 1 changed file with 14 additions and 6 deletions.
20 changes: 14 additions & 6 deletions generic/tclEncoding.c
Original file line number Diff line number Diff line change
Expand Up @@ -237,8 +237,13 @@ static Tcl_EncodingConvertProc Iso88591ToUtfProc;
*/

static const Tcl_ObjType encodingType = {
"encoding", FreeEncodingInternalRep, DupEncodingInternalRep, NULL, NULL
"encoding",
FreeEncodingInternalRep,
DupEncodingInternalRep,
NULL,
NULL
};

#define EncodingSetInternalRep(objPtr, encoding) \
do { \
Tcl_ObjInternalRep ir; \
Expand Down Expand Up @@ -461,7 +466,7 @@ FillEncodingFileMap(void)
map = Tcl_NewDictObj();
Tcl_IncrRefCount(map);

for (i = numDirs-1; i >= 0; i--) {
for (i = numDirs-1; i != TCL_INDEX_NONE; i--) {
/*
* Iterate backwards through the search path so as we overwrite
* entries found, we favor files earlier on the search path.
Expand Down Expand Up @@ -1182,7 +1187,7 @@ Tcl_ExternalToUtfDString(
* Tcl_ExternalToUtfDStringEx --
*
* Convert a source buffer from the specified encoding into UTF-8.
* The parameter flags controls the behavior, if any of the bytes in
* The parameter flags controls the behavior, if any of the bytes in
* the source buffer are invalid or cannot be represented in utf-8.
* Possible flags values:
* TCL_ENCODING_STOPONERROR: don't replace invalid characters/bytes but
Expand Down Expand Up @@ -1458,8 +1463,9 @@ Tcl_UtfToExternalDStringEx(
char *dst;
Tcl_EncodingState state;
const Encoding *encodingPtr;
int dstLen, result, soFar, srcRead, dstWrote, dstChars;
int result, soFar, srcRead, dstWrote, dstChars;
const char *srcStart = src;
int dstLen;

Tcl_DStringInit(dstPtr);
dst = Tcl_DStringValue(dstPtr);
Expand Down Expand Up @@ -2627,9 +2633,10 @@ Utf32ToUtfProc(
result = TCL_CONVERT_NOSPACE;
} else {
/* destination is not full, so we really are at the end now */
if (flags & TCL_ENCODING_STOPONERROR) {
if ((flags & TCL_ENCODING_STRICT) == TCL_ENCODING_STRICT) {
result = TCL_CONVERT_SYNTAX;
} else {
result = TCL_OK;
dst += Tcl_UniCharToUtf(0xFFFD, dst);
numChars++;
src += bytesLeft;
Expand Down Expand Up @@ -2854,9 +2861,10 @@ Utf16ToUtfProc(
result = TCL_CONVERT_NOSPACE;
} else {
/* destination is not full, so we really are at the end now */
if (flags & TCL_ENCODING_STOPONERROR) {
if (((flags & TCL_ENCODING_STRICT) == TCL_ENCODING_STRICT)) {
result = TCL_CONVERT_SYNTAX;
} else {
result = TCL_OK;
dst += Tcl_UniCharToUtf(0xFFFD, dst);
numChars++;
src++;
Expand Down

0 comments on commit 6c75773

Please sign in to comment.