X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/66b3ec7f9a6924fa952e67912b3d7d833e278742..0ded6bb695f82a0b98d0862ec6870fc5c6cb8b97:/src/common/wxchar.cpp diff --git a/src/common/wxchar.cpp b/src/common/wxchar.cpp index f9e73aed8a..7e3c343b5e 100644 --- a/src/common/wxchar.cpp +++ b/src/common/wxchar.cpp @@ -41,10 +41,10 @@ #endif #if defined(__WIN32__) && defined(wxNEED_WX_CTYPE_H) -#include -#include -#include -#include + #include + #include + #include + #include #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; } @@ -168,6 +162,19 @@ int WXDLLEXPORT wxStricmp(const wxChar *psz1, const wxChar *psz2) } #endif +#ifndef wxStricmp +int WXDLLEXPORT wxStrnicmp(const wxChar *s1, const wxChar *s2, size_t n) +{ + register wxChar c1, c2; + while (n && ((c1 = wxTolower(*s1)) == (c2 = wxTolower(*s2)) ) && c1) n--, s1++, s2++; + if (n) { + if (c1 < c2) return -1; + if (c1 > c2) return 1; + } + return 0; +} +#endif + #ifndef wxStrtok WXDLLEXPORT wxChar * wxStrtok(wxChar *psz, const wxChar *delim, wxChar **save_ptr) {