Added wxOKlibc(), which checks for glibc2.0, which incorrectly does UTF-8

conversion even when it's not in UTF-8 locale


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2273 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Ove Kaaven
1999-04-24 13:57:26 +00:00
parent b43ca95a8f
commit 434d2cb3c6
2 changed files with 23 additions and 2 deletions

View File

@@ -458,6 +458,7 @@ size_t WXDLLEXPORT wxWC2MB(char *buf, const wchar_t *psz, size_t n);
#define wxWX2WC wxMB2WC
#endif
#endif
bool WXDLLEXPORT wxOKlibc(); // for internal use
// if libc versions are not available, use replacements defined in wxchar.cpp
#ifndef wxStrdup

View File

@@ -40,7 +40,7 @@
#endif
#if wxUSE_WCHAR_T
size_t wxMB2WC(wchar_t *buf, const char *psz, size_t n)
size_t WXDLLEXPORT wxMB2WC(wchar_t *buf, const char *psz, size_t n)
{
if (buf) {
if (!n || !*psz) {
@@ -62,7 +62,7 @@ size_t wxMB2WC(wchar_t *buf, const char *psz, size_t n)
#endif // GNU
}
size_t wxWC2MB(char *buf, const wchar_t *pwz, size_t n)
size_t WXDLLEXPORT wxWC2MB(char *buf, const wchar_t *pwz, size_t n)
{
if (buf) {
if (!n || !*pwz) {
@@ -86,6 +86,26 @@ size_t wxWC2MB(char *buf, const wchar_t *pwz, size_t n)
}
#endif
bool WXDLLEXPORT wxOKlibc()
{
#if wxUSE_WCHAR_T && defined(__UNIX__) && defined(__GLIBC__)
// GNU libc uses UTF-8 even when it shouldn't
wchar_t res;
if ((MB_CUR_MAX == 2) &&
(wxMB2WC(&res, "\xdd\xa5", 1)>0) &&
(res==0x765)) {
// this is UTF-8 allright, check whether that's what we want
char *cur_locale = setlocale(LC_ALL, NULL);
if ((strlen(cur_locale) < 4) ||
(strcasecmp(cur_locale + strlen(cur_locale) - 4, "utf8"))) {
// nope, don't use libc conversion
return FALSE;
}
}
#endif
return TRUE;
}
#ifndef wxStrdup
wxChar * WXDLLEXPORT wxStrdup(const wxChar *psz)
{