tng         2002/07/29 08:29:09

  Modified:    c/src/xercesc/util/Transcoders/Win32 Win32TransService.cpp
  Log:
  [Bug 9533] Win32TransService does not recognize aliases for encodings.  Fixed by Tom 
Keane.
  
  Revision  Changes    Path
  1.4       +16 -6     
xml-xerces/c/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp
  
  Index: Win32TransService.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/c/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Win32TransService.cpp     29 Jul 2002 14:22:20 -0000      1.3
  +++ Win32TransService.cpp     29 Jul 2002 15:29:09 -0000      1.4
  @@ -359,6 +359,7 @@
       //  values we stored for the original.
       //
       subIndex = 0;
  +    char aliasBuf[nameBufSz + 1];
       while (true)
       {
           // Get the name of the next key
  @@ -392,12 +393,12 @@
           //  then construct a new one with the new name and the aliased
           //  ids.
           //
  -        if (isAlias(encodingKey, nameBuf, nameBufSz))
  +        if (isAlias(encodingKey, aliasBuf, nameBufSz))
           {
  -            const unsigned int srcLen = strlen(nameBuf);
  -            const unsigned int targetLen = ::mbstowcs(0, nameBuf, srcLen);
  +            const unsigned int srcLen = strlen(aliasBuf);
  +            const unsigned int targetLen = ::mbstowcs(0, aliasBuf, srcLen);
               XMLCh* uniAlias = new XMLCh[targetLen + 1];
  -            ::mbstowcs(uniAlias, nameBuf, srcLen);
  +            ::mbstowcs(uniAlias, aliasBuf, srcLen);
               uniAlias[targetLen] = 0;
               _wcsupr(uniAlias);
   
  @@ -405,16 +406,25 @@
               CPMapEntry* aliasedEntry = fCPMap->get(uniAlias);
               if (aliasedEntry)
               {
  +                const unsigned int srcLen = strlen(nameBuf);
  +                const unsigned int targetLen = ::mbstowcs(0, nameBuf, srcLen);
  +                XMLCh* uniName = 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(uniAlias, aliasedEntry->getEncodingName()))
  +                if (::wcscmp(uniName, aliasedEntry->getEncodingName()))
                   {
  -                    CPMapEntry* newEntry = new CPMapEntry(uniAlias, 
aliasedEntry->getWinCP(), aliasedEntry->getIEEncoding());
  +                    CPMapEntry* newEntry = new CPMapEntry(uniName, 
aliasedEntry->getWinCP(), aliasedEntry->getIEEncoding());
                       fCPMap->put((void*)newEntry->getEncodingName(), newEntry);
                   }
  +
  +                delete [] uniName;
               }
               delete [] uniAlias;
           }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to