#ifdef HAVE_ICONV_H
#include <iconv.h>
#endif
-#ifdef HAVE_LANGINFO_H
- #include <langinfo.h>
-#endif
#ifdef __WXMSW__
#include <windows.h>
#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
// ----------------------------------------------------------------------------
#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)
{
}
}
-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))
{
{
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;
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.
{
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()