]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/strconv.cpp
Added SetOption,GetOption[Int] to wxSystemSettings. Made native MaskBlt optional.
[wxWidgets.git] / src / common / strconv.cpp
index b8982301a6a50b40fe6c0972870e63eba3bd20b1..8d27a4dd24ca0f8cbb9a11329332dd00536f948e 100644 (file)
 #define BSWAP_UTF32(str, len) BSWAP_UCS4(str, len)
 #define BSWAP_UTF16(str, len) BSWAP_UCS2(str, len)
 
+// under Unix SIZEOF_WCHAR_T is defined by configure, but under other platforms
+// it might be not defined - assume the most common value
+#ifndef SIZEOF_WCHAR_T
+    #define SIZEOF_WCHAR_T 2
+#endif // !defined(SIZEOF_WCHAR_T)
+
 #if SIZEOF_WCHAR_T == 4
-#define WC_NAME "UCS4"
-#define WC_BSWAP BSWAP_UCS4
+    #define WC_NAME "UCS4"
+    #define WC_BSWAP BSWAP_UCS4
 #elif SIZEOF_WCHAR_T == 2
-#define WC_NAME "UTF16"
-#define WC_BSWAP BSWAP_UTF16
-#define WC_UTF16
+    #define WC_NAME "UTF16"
+    #define WC_BSWAP BSWAP_UTF16
+    #define WC_UTF16
+#else // sizeof(wchar_t) != 2 nor 4
+    // I don't know what to do about this
+    #error "Weird sizeof(wchar_t): please report your platform details to wx-users mailing list"
 #endif
 
 // ----------------------------------------------------------------------------
@@ -88,7 +97,7 @@ WXDLLEXPORT_DATA(wxMBConv *) wxConvCurrent = &wxConvLibc;
 
 #ifdef WC_UTF16
 
-static size_t encode_utf16(wxUint32 input,wxUint16*output)
+static size_t encode_utf16(wxUint32 input, wchar_t *output)
 {
     if (input<=0xffff)
     {
@@ -110,7 +119,7 @@ static size_t encode_utf16(wxUint32 input,wxUint16*output)
     }
 }
 
-static size_t decode_utf16(wxUint16*input,wxUint32&output)
+static size_t decode_utf16(const wchar_t* input, wxUint32& output)
 {
     if ((*input<0xd800) || (*input>0xdfff))
     {
@@ -348,7 +357,7 @@ size_t wxMBConvUTF8::WC2MB(char *buf, const wchar_t *psz, size_t n) const
     {
         wxUint32 cc;
 #ifdef WC_UTF16
-        size_t pa = decode_utf16(psz,cc);
+        size_t pa = decode_utf16(psz, cc);
         psz += (pa == (size_t)-1) ? 1 : pa;
 #else
         cc=(*psz++) & 0x7fffffff;
@@ -409,7 +418,7 @@ static long CharsetToCodepage(const wxChar *name)
         path += cn;
         wxRegKey key(wxRegKey::HKCR, path);
 
-        if (!key.Exists()) continue;
+        if (!key.Exists()) break;
 
         // two cases: either there's an AliasForCharset string,
         // or there are Codepage and InternetEncoding dwords.
@@ -618,14 +627,18 @@ public:
     {
         size_t len =
             MultiByteToWideChar(CodePage, 0, psz, -1, buf, buf ? n : 0);
-        return len ? len : (size_t)-1;
+        //VS: returns # of written chars for buf!=NULL and *size* 
+        //    needed buffer for buf==NULL
+        return len ? (buf ? len : len-1) : (size_t)-1;
     }
 
     size_t WC2MB(char *buf, const wchar_t *psz, size_t n)
     {
         size_t len = WideCharToMultiByte(CodePage, 0, psz, -1, buf,
                                          buf ? n : 0, NULL, NULL);
-        return len ? len : (size_t)-1;
+        //VS: returns # of written chars for buf!=NULL and *size* 
+        //    needed buffer for buf==NULL
+        return len ? (buf ? len : len-1) : (size_t)-1;
     }
 
     bool usable()