in skiko/src/jvmMain/cpp/common/interop.cc [983:1013]
static int UTF16ToUTF8(char dst[], int dstCapacity, const uint16_t src[], size_t srcLength) {
if (!dst) {
dstCapacity = 0;
}
int dstLength = 0;
const char* endDst = dst + dstCapacity;
const uint16_t* endSrc = src + srcLength;
while (src < endSrc) {
SkUnichar uni = NextUTF16(&src, endSrc);
if (uni < 0) {
return -1;
}
char utf8[SkUTF::kMaxBytesInUTF8Sequence];
size_t count = SkUTF::ToUTF8(uni, utf8);
if (count == 0) {
return -1;
}
dstLength += count;
if (dst) {
const char* elems = utf8;
while (dst < endDst && count > 0) {
*dst++ = *elems++;
count -= 1;
}
}
}
return dstLength;
}