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