From 13702468029c482d6f177bf781ab590217dc66ea Mon Sep 17 00:00:00 2001
From: Alberto Massari <amassari@apache.org>
Date: Fri, 23 Jul 2004 21:16:07 +0000
Subject: [PATCH] calcRequiredSize assumed all the characters were of the same
 size (jira#1142) - Patch by Anders Hybertz

git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@175969 13f79535-47bb-0310-9956-ffa450edef68
---
 .../Transcoders/Iconv/IconvTransService.cpp   | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/src/xercesc/util/Transcoders/Iconv/IconvTransService.cpp b/src/xercesc/util/Transcoders/Iconv/IconvTransService.cpp
index 588d2b8fe..b52bb8f7e 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;
 }
 
 
-- 
GitLab