]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/wxchar.cpp
fix for wxComboBox::GetSelection from inside event handler
[wxWidgets.git] / src / common / wxchar.cpp
index d404a98cb8a36fb3c0351d6505b87d8cd9596efd..7e3c343b5e6dfd4bb6b3c19506349c1ec5648171 100644 (file)
 #endif
 
 #if defined(__WIN32__) && defined(wxNEED_WX_CTYPE_H)
-#include <windef.h>
-#include <winbase.h>
-#include <winnls.h>
-#include <winnt.h>
+  #include <windef.h>
+  #include <winbase.h>
+  #include <winnls.h>
+  #include <winnt.h>
 #endif
 
 #if wxUSE_WCHAR_T
@@ -58,11 +58,8 @@ size_t WXDLLEXPORT wxMB2WC(wchar_t *buf, const char *psz, size_t n)
     return mbstowcs(buf, psz, n);
   }
 
-  // NB: GNU libc5 wcstombs() is completely broken, don't use it (it doesn't
-  //     honor the 3rd parameter, thus it will happily crash here).
-#if wxUSE_WCSRTOMBS
-  // don't know if it's really needed (or if we can pass NULL), but better safe
-  // than quick
+  // assume that we have mbsrtowcs() too if we have wcsrtombs()
+#ifdef HAVE_WCSRTOMBS
   mbstate_t mbstate;
   return mbsrtowcs((wchar_t *) NULL, &psz, 0, &mbstate);
 #else  // !GNU libc
@@ -81,18 +78,14 @@ size_t WXDLLEXPORT wxWC2MB(char *buf, const wchar_t *pwz, size_t n)
     return wcstombs(buf, pwz, n);
   }
 
-  // NB: GNU libc5 wcstombs() is completely broken, don't use it (it doesn't
-  //     honor the 3rd parameter, thus it will happily crash here).
-#if wxUSE_WCSRTOMBS
-  // don't know if it's really needed (or if we can pass NULL), but better safe
-  // than quick
+#if HAVE_WCSRTOMBS
   mbstate_t mbstate;
   return wcsrtombs((char *) NULL, &pwz, 0, &mbstate);
 #else  // !GNU libc
   return wcstombs((char *) NULL, pwz, 0);
 #endif // GNU
 }
-#endif
+#endif // wxUSE_WCHAR_T
 
 bool WXDLLEXPORT wxOKlibc()
 {
@@ -105,7 +98,8 @@ bool WXDLLEXPORT wxOKlibc()
     // this is UTF-8 allright, check whether that's what we want
     char *cur_locale = setlocale(LC_CTYPE, NULL);
     if ((strlen(cur_locale) < 4) ||
-       (strcasecmp(cur_locale + strlen(cur_locale) - 4, "utf8"))) {
+       (strcasecmp(cur_locale + strlen(cur_locale) - 4, "utf8")) ||
+       (strcasecmp(cur_locale + strlen(cur_locale) - 5, "utf-8"))) {
       // nope, don't use libc conversion
       return FALSE;
     }