You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by am...@apache.org on 2007/05/15 14:11:05 UTC

svn commit: r538144 - /xerces/c/trunk/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp

Author: amassari
Date: Tue May 15 05:11:04 2007
New Revision: 538144

URL: http://svn.apache.org/viewvc?view=rev&rev=538144
Log:
mblen returns 0 when given an empty string; rewrote code to only use mbstowcs (XERCESC-1702)

Modified:
    xerces/c/trunk/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp

Modified: xerces/c/trunk/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp?view=diff&rev=538144&r1=538143&r2=538144
==============================================================================
--- xerces/c/trunk/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp (original)
+++ xerces/c/trunk/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp Tue May 15 05:11:04 2007
@@ -432,11 +432,9 @@
         if (isAlias(encodingKey, aliasBuf, nameBufSz))
         {
             const unsigned int srcLen = strlen(aliasBuf);
-            const unsigned charLen = ::mblen(aliasBuf, MB_CUR_MAX);
-
-            if (charLen != -1) {
-                const unsigned int targetLen = srcLen/charLen;
-
+            size_t targetLen=::mbstowcs(NULL, aliasBuf, srcLen);
+            if(targetLen!=-1)
+            {
                 XMLCh* uniAlias = (XMLCh*) XMLPlatformUtils::fgMemoryManager->allocate
                 (
                     (targetLen + 1) * sizeof(XMLCh)
@@ -450,29 +448,30 @@
                 if (aliasedEntry)
                 {
                     const unsigned int srcLen = strlen(nameBuf);
-                    const unsigned charLen = ::mblen(nameBuf, MB_CUR_MAX);
-                    const unsigned int targetLen = srcLen/charLen;
-                    
-                    XMLCh* uniName = (XMLCh*) XMLPlatformUtils::fgMemoryManager->allocate
-                    (
-                        (targetLen + 1) * sizeof(XMLCh)
-                    );//new XMLCh[targetLen + 1];
-                    ::mbstowcs(uniName, nameBuf, srcLen);
-                    uniName[targetLen] = 0;
-                    wcsupr(uniName);
-
-                    //
-                    //  If the name is actually different, then take it.
-                    //  Otherwise, don't take it. They map aliases that are
-                    //  just different case.
-                    //
-                    if (::wcscmp(uniName, aliasedEntry->getEncodingName()))
+                    size_t targetLen=::mbstowcs(NULL, nameBuf, srcLen);
+                    if(targetLen!=-1)
                     {
-                        CPMapEntry* newEntry = new CPMapEntry(uniName, aliasedEntry->getIEEncoding());
-                        fCPMap->put((void*)newEntry->getEncodingName(), newEntry);
-                    }
+                        XMLCh* uniName = (XMLCh*) XMLPlatformUtils::fgMemoryManager->allocate
+                        (
+                            (targetLen + 1) * sizeof(XMLCh)
+                        );//new XMLCh[targetLen + 1];
+                        ::mbstowcs(uniName, nameBuf, srcLen);
+                        uniName[targetLen] = 0;
+                        wcsupr(uniName);
+
+                        //
+                        //  If the name is actually different, then take it.
+                        //  Otherwise, don't take it. They map aliases that are
+                        //  just different case.
+                        //
+                        if (::wcscmp(uniName, aliasedEntry->getEncodingName()))
+                        {
+                            CPMapEntry* newEntry = new CPMapEntry(uniName, aliasedEntry->getIEEncoding());
+                            fCPMap->put((void*)newEntry->getEncodingName(), newEntry);
+                        }
 
-                    XMLPlatformUtils::fgMemoryManager->deallocate(uniName);//delete [] uniName;
+                        XMLPlatformUtils::fgMemoryManager->deallocate(uniName);//delete [] uniName;
+                    }
                 }
                 XMLPlatformUtils::fgMemoryManager->deallocate(uniAlias);//delete [] uniAlias;
             }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org