diff --git a/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.cpp b/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.cpp index 0ee6489cbc7d4dc167cd4737f7a00ae6b0bc7c77..3beb3a1ef4c51de636c40d263776f62e3879fc8a 100644 --- a/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.cpp +++ b/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.cpp @@ -881,7 +881,7 @@ MacOSLCPTranscoder::calcRequiredSize(const char* const srcText) ; OSStatus status; - for (status = kTECOutputBufferFullStatus; status == kTECOutputBufferFullStatus; ) + for (status = noErr; status == noErr && srcCnt > 0; ) { ByteCount bytesConsumed = 0; ByteCount bytesProduced = 0; @@ -906,6 +906,9 @@ MacOSLCPTranscoder::calcRequiredSize(const char* const srcText) srcCnt -= bytesConsumed; totalCharsProduced += bytesProduced / sizeof(UniChar); + if (status == kTECOutputBufferFullStatus || status == kTECUsedFallbacksStatus) + status = noErr; + options |= kUnicodeKeepInfoMask; } @@ -986,7 +989,7 @@ MacOSLCPTranscoder::calcRequiredSize(const XMLCh* const srcText) totalBytesProduced += bytesProduced; - if (status == kTECOutputBufferFullStatus) + if (status == kTECOutputBufferFullStatus || status == kTECUsedFallbacksStatus) status = noErr; options |= kUnicodeKeepInfoMask; @@ -1095,7 +1098,7 @@ MacOSLCPTranscoder::transcode(const XMLCh* const srcText, src += charsConsumed; srcCnt -= charsConsumed; - if (status == kTECOutputBufferFullStatus) + if (status == kTECOutputBufferFullStatus || status == kTECUsedFallbacksStatus) status = noErr; options |= kUnicodeKeepInfoMask; @@ -1201,7 +1204,7 @@ MacOSLCPTranscoder::transcode(const char* const srcText, src += bytesConsumed; srcCnt -= bytesConsumed; - if (status == kTECOutputBufferFullStatus) + if (status == kTECOutputBufferFullStatus || status == kTECUsedFallbacksStatus) status = noErr; options |= kUnicodeKeepInfoMask; @@ -1281,6 +1284,9 @@ MacOSLCPTranscoder::transcode( const char* const toTranscode // Zero terminate the output string toFill[charsProduced] = L'\0'; + if (status == kTECUsedFallbacksStatus) + status = noErr; + return (status == noErr); } @@ -1356,6 +1362,12 @@ MacOSLCPTranscoder::transcode( const XMLCh* const toTranscode totalCharsProduced += bytesProduced; + if (status == kTECUsedFallbacksStatus) + status = noErr; + + if (UNICODE_SIZE_MISMATCH && status == kTECOutputBufferFullStatus) + status = noErr; + options |= kUnicodeKeepInfoMask; }