Diff
Not logged in

Differences From Artifact [80c3a3b4a5]:

To Artifact [5f74755db2]:


742
743
744
745
746
747
748

749
750
751
752




753
754


755
756
757
758
759
760
761
742
743
744
745
746
747
748
749




750
751
752
753


754
755
756
757
758
759
760
761
762







+
-
-
-
-
+
+
+
+
-
-
+
+







    p = src;
    endPtr = src + length;
    optPtr = endPtr - 3;
    while (p <= optPtr) {
	p += Tcl_UtfToChar16(p, &ch);
	*w++ = ch;
    }
    while (p < endPtr) {
    while ((p < endPtr) && TclChar16Complete(p, endPtr-p)) {
	p += Tcl_UtfToChar16(p, &ch);
	*w++ = ch;
    }
	if (TclChar16Complete(p, endPtr-p)) {
	    p += Tcl_UtfToChar16(p, &ch);
	    *w++ = ch;
	} else {
    while (p < endPtr) {
	*w++ = UCHAR(*p++);
	    *w++ = UCHAR(*p++);
	}
    }
    *w = '\0';
    Tcl_DStringSetLength(dsPtr,
	    oldLength + ((char *) w - (char *) wString));

    return wString;
}
838
839
840
841
842
843
844

845
846


847
848

849
850
851
852
853
854
855








856
857
858
859
860
861
862
839
840
841
842
843
844
845
846


847
848


849







850
851
852
853
854
855
856
857
858
859
860
861
862
863
864







+
-
-
+
+
-
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+







	 */
	while (src <= optPtr
		/* && Tcl_UtfCharComplete(src, endPtr - src) */ ) {
	    src += TclUtfToUniChar(src, &ch);
	    i++;
	}
	/* Loop over the remaining string where call must happen */
	while (src < endPtr) {
	while ((src < endPtr) && Tcl_UtfCharComplete(src, endPtr - src)) {
	    src += TclUtfToUniChar(src, &ch);
	    if (Tcl_UtfCharComplete(src, endPtr - src)) {
		src += TclUtfToUniChar(src, &ch);
	    i++;
	}
	    } else {
	if (src < endPtr) {
	    /*
	     * String ends in an incomplete UTF-8 sequence.
	     * Count every byte in it.
	     */
	    i += endPtr - src;
	}
		/*
		 * src points to incomplete UTF-8 sequence 
		 * Treat first byte as character and count it
		 */
		src++;
	    }
	    i++;
	}
    }
    return i;
}

/*
 *---------------------------------------------------------------------------
 *