carnold     2004/12/14 11:03:14

  Modified:    include/log4cxx/helpers transcoder.h
               src      transcoder.cpp
  Log:
  LOGCXX-10: tcharh/Unicode Windows iter
  
  Revision  Changes    Path
  1.4       +0 -8      logging-log4cxx/include/log4cxx/helpers/transcoder.h
  
  Index: transcoder.h
  ===================================================================
  RCS file: /home/cvs/logging-log4cxx/include/log4cxx/helpers/transcoder.h,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- transcoder.h      13 Dec 2004 05:05:13 -0000      1.3
  +++ transcoder.h      14 Dec 2004 19:03:14 -0000      1.4
  @@ -84,14 +84,6 @@
         };
         static const char SUBSTITUTION_CHAR = '?';
         static const wchar_t SUBSTITUTION_WCHAR = L'?';
  -
  -#if !defined(_GCC_VER_)
  -      struct mbstate_t {};
  -      size_t mbsnrtowcs(wchar_t *dest, const char **src,
  -                   size_t nms, size_t len, mbstate_t *ps);
  -      size_t wcsnrtombs(char *dest, const wchar_t **src, size_t nwc,
  -                   size_t len, mbstate_t *ps); 
  -#endif
      }
   };
   
  
  
  
  1.3       +52 -2     logging-log4cxx/src/transcoder.cpp
  
  Index: transcoder.cpp
  ===================================================================
  RCS file: /home/cvs/logging-log4cxx/src/transcoder.cpp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- transcoder.cpp    13 Dec 2004 05:05:13 -0000      1.2
  +++ transcoder.cpp    14 Dec 2004 19:03:14 -0000      1.3
  @@ -15,7 +15,8 @@
    */
   
   #include <log4cxx/helpers/transcoder.h>
  -#include <log4cxx/helpers/pool.h>
  +#include <log4cxx/helpers/pool.h>
  +#include <stdlib.h>
   
   using namespace log4cxx;
   using namespace log4cxx::helpers;
  @@ -26,7 +27,56 @@
   *   Appends an external string to an
   *     internal string.
   */
  -#if defined(LOG4CXX_LOGCHAR_IS_WCHAR)
  +#if defined(LOG4CXX_LOGCHAR_IS_WCHAR)
  +
  +
  +#if !defined(_GCC_VER_)
  +namespace log4cxx {
  +      struct mbstate_t {};
  +      size_t mbsnrtowcs(wchar_t *dest, const char **src,
  +          size_t srclenin, size_t destlenin, mbstate_t *ps) {
  +          size_t destlen = destlenin;
  +          size_t srclen = srclenin;
  +          size_t mblen = -1;
  +          while(srclen > 0 && destlen > 0) {
  +            mblen = mbtowc(dest, *src, srclen);
  +            if (mblen <= 0) break;
  +            *src += mblen;
  +            *dest++;
  +            destlen--;
  +            srclen -= mblen;
  +          }
  +          if (mblen < 0) {
  +              return mblen;
  +          }
  +          return destlenin - destlen;
  +      }
  +
  +      size_t wcsnrtombs(char *dest, const wchar_t **src, size_t srclenin,
  +          size_t destlenin, mbstate_t *ps) {
  +          size_t destlen = destlenin;
  +          size_t srclen = srclenin;
  +          size_t mblen = -1;
  +          char buf[12];
  +          while(srclen > 0 && destlen > 0) {
  +            mblen = wctomb(buf, **src);
  +            if (mblen <= 0) break;
  +            *src++;
  +            memcpy(dest, buf, mblen);
  +            *dest += mblen;
  +            destlen -= mblen;
  +            srclen--;
  +          }
  +          if (mblen < 0) {
  +              return mblen;
  +          }
  +          return destlenin - destlen;
  +      }
  +}
  +#endif
  +
  +
  +
   void Transcoder::decode(const char* src, size_t len, LogString& dst) {
     wchar_t buf[BUFSIZE];
     mbstate_t ps;
  
  
  

Reply via email to