amassari    2004/01/16 08:34:59

  Modified:    c/src/xercesc/util/Transcoders/Win32 Win32TransService.cpp
  Log:
  In the Win32LCPTranscoder, don't use wcstombs or mbstowcs, as they don't pick up the 
correct local code page; use the Win32 API using CP_ACP as the code page
  
  Revision  Changes    Path
  1.20      +12 -17    
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.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- Win32TransService.cpp     13 Jan 2004 16:34:22 -0000      1.19
  +++ Win32TransService.cpp     16 Jan 2004 16:34:59 -0000      1.20
  @@ -849,15 +849,10 @@
       if (!srcText)
           return 0;
   
  -    unsigned charLen = ::mblen(srcText, MB_CUR_MAX);
  -    if (charLen == -1)
  +    int retVal = ::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, srcText, -1, NULL, 
0);
  +    if (retVal == -1)
           return 0;
  -    else if (charLen != 0)
  -        charLen = strlen(srcText)/charLen;
  -
  -    if (charLen == -1)
  -        return 0;
  -    return charLen;
  +    return retVal;
   }
   
   
  @@ -867,8 +862,8 @@
       if (!srcText)
           return 0;
   
  -    const unsigned int retVal = ::WideCharToMultiByte(CP_ACP, 0, srcText, -1, NULL, 
0, NULL, NULL);
  -    if (retVal == (unsigned int)-1)
  +    int retVal = ::WideCharToMultiByte(CP_ACP, 0, srcText, -1, NULL, 0, NULL, NULL);
  +    if (retVal == -1)
           return 0;
       return retVal;
   }
  @@ -888,7 +883,7 @@
   
           // Allocate a buffer of that size plus one for the null and transcode
           retVal = new char[neededLen + 1];
  -        ::wcstombs(retVal, toTranscode, neededLen + 1);
  +        ::WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)toTranscode, -1, retVal, 
neededLen+1, NULL, NULL);
   
           // And cap it off anyway just to make sure
           retVal[neededLen] = 0;
  @@ -915,7 +910,7 @@
   
           // Allocate a buffer of that size plus one for the null and transcode
           retVal = (char*) manager->allocate((neededLen + 1) * sizeof(char)); //new 
char[neededLen + 1];
  -        ::wcstombs(retVal, toTranscode, neededLen + 1);
  +        ::WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)toTranscode, -1, retVal, 
neededLen+1, NULL, NULL);
   
           // And cap it off anyway just to make sure
           retVal[neededLen] = 0;
  @@ -949,7 +944,7 @@
   
           // Allocate a buffer of that size plus one for the null and transcode
           retVal = new XMLCh[neededLen + 1];
  -        ::mbstowcs(retVal, toTranscode, neededLen + 1);
  +        ::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, toTranscode, -1, 
(LPWSTR)retVal, neededLen + 1);
   
           // Cap it off just to make sure. We are so paranoid!
           retVal[neededLen] = 0;
  @@ -982,7 +977,7 @@
   
           // Allocate a buffer of that size plus one for the null and transcode
           retVal = (XMLCh*) manager->allocate((neededLen + 1) * sizeof(XMLCh)); //new 
XMLCh[neededLen + 1];
  -        ::mbstowcs(retVal, toTranscode, neededLen + 1);
  +        ::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, toTranscode, -1, 
(LPWSTR)retVal, neededLen + 1);
   
           // Cap it off just to make sure. We are so paranoid!
           retVal[neededLen] = 0;
  @@ -1015,7 +1010,7 @@
       }
   
       // This one has a fixed size output, so try it and if it fails it fails
  -    if (::mbstowcs(toFill, toTranscode, maxChars + 1) == size_t(-1))
  +    if ( size_t(-1) == ::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, toTranscode, 
-1, (LPWSTR)toFill, maxChars + 1) )
           return false;
       return true;
   }
  @@ -1040,7 +1035,7 @@
       }
   
       // This one has a fixed size output, so try it and if it fails it fails
  -    if (::wcstombs(toFill, toTranscode, maxBytes + 1) == size_t(-1))
  +    if ( size_t(-1) == ::WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)toTranscode, -1, 
toFill, maxBytes + 1, NULL, NULL) )
           return false;
   
       // Cap it off just in case
  
  
  

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

Reply via email to