- while ((usedLen < numChars && theUsedByteLen < maxByteLen) && !localUsedByteLen && (localUsedLen = TO_BYTE_FALLBACK(converter, characters + usedLen, numChars - usedLen, NULL, 0, &localUsedByteLen))) usedLen += localUsedLen;
-
- theUsedByteLen += localUsedByteLen;
+ // after the buffer is full, we still try out all the rest of the characters
+ // if all characters cannot be converted, we mark the result as insufficient output buffer
+ while ((usedLen < numChars) && !localUsedByteLen && (localUsedLen = TO_BYTE_FALLBACK(converter, characters + usedLen, numChars - usedLen, NULL, 0, &localUsedByteLen))) {
+ if (localUsedByteLen == 0) {
+ usedLen += localUsedLen;
+ }
+ }