diff --git a/src/xercesc/util/Transcoders/Iconv/IconvTransService.cpp b/src/xercesc/util/Transcoders/Iconv/IconvTransService.cpp index 588d2b8fe05181edb4866536b3e20e8e7d453f9a..b52bb8f7e34d6d2c3f228bc2cda8999d7b7e5d98 100644 --- a/src/xercesc/util/Transcoders/Iconv/IconvTransService.cpp +++ b/src/xercesc/util/Transcoders/Iconv/IconvTransService.cpp @@ -261,15 +261,16 @@ unsigned int IconvLCPTranscoder::calcRequiredSize(const char* const srcText if (!srcText) return 0; - unsigned charLen = ::mblen(srcText, MB_CUR_MAX); - if (charLen == -1) - return 0; - else if (charLen != 0) - charLen = strlen(srcText)/charLen; - - if (charLen == -1) - return 0; - return charLen; + unsigned int len=0; + unsigned int size=strlen(srcText); + for( unsigned int i = 0; i < size; ++len ) + { + unsigned int retVal=::mblen( &srcText[i], MB_CUR_MAX ); + if( -1 == retVal ) + return 0; + i += retVal; + } + return len; }