X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/28e0798fcdffb5233097060f7d43ffa01df7271d..90fae9d2cfd82625c8c8279660237514470bc31a:/src/common/xlocale.cpp diff --git a/src/common/xlocale.cpp b/src/common/xlocale.cpp index f66b2ab71a..b1c08bade9 100644 --- a/src/common/xlocale.cpp +++ b/src/common/xlocale.cpp @@ -32,6 +32,7 @@ #include "wx/xlocale.h" #include +#include // ---------------------------------------------------------------------------- // module globals @@ -76,7 +77,9 @@ wxXLocale& wxXLocale::GetCLocale() { if ( !gs_cLocale ) { - gs_cLocale = new wxXLocale(static_cast(NULL)); + // NOTE: bcc551 has trouble doing static_cast with incomplete + // type definition. reinterpret_cast used as workaround + gs_cLocale = new wxXLocale( reinterpret_cast(NULL) ); } return *gs_cLocale; @@ -153,7 +156,7 @@ void wxXLocale::Init(const char *loc) m_locale = newlocale(LC_ALL_MASK, buf2.c_str(), NULL); } } - + // TODO: wxLocale performs many more manipulations of the given locale // string in the attempt to set a valid locale; reusing that code // (changing it to take a generic wxTryLocale callback) would be nice @@ -194,7 +197,7 @@ void wxXLocale::Free() #define CTYPE_UPPER 0x0200 #define CTYPE_XDIGIT 0x0400 -static unsigned int gs_lookup[] = +static const unsigned int gs_lookup[] = { 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0004, 0x0004, @@ -276,22 +279,22 @@ int wxToupper_l(const wxUniChar& c, const wxXLocale& loc) case !wxHAS_XLOCALE_SUPPORT... */ +/* + Note that this code is similar to (a portion of) wxLocale::IsAvailable code +*/ #define IMPLEMENT_STRTOX_L_START \ wxCHECK(loc.IsOk(), 0); \ \ - /* (Try to) temporary set the locale to 'C' */ \ - const char *oldLocale = wxSetlocale(LC_NUMERIC, ""); \ - const char *tmp = wxSetlocale(LC_NUMERIC, "C"); \ - if ( !tmp ) \ + /* (Try to) temporary set the 'C' locale */ \ + const char *oldLocale = wxSetlocale(LC_NUMERIC, "C"); \ + if ( !oldLocale ) \ { \ - /* restore the original locale */ \ - wxSetlocale(LC_NUMERIC, oldLocale); \ + /* the current locale was not changed; no need to */ \ + /* restore the previous one... */ \ errno = EINVAL; \ /* signal an error (better than nothing) */ \ return 0; \ - } \ - \ - + } #define IMPLEMENT_STRTOX_L_END \ /* restore the original locale */ \ @@ -313,7 +316,7 @@ double wxStrtod_l(const char* str, char **endptr, const wxXLocale& loc) } long wxStrtol_l(const wchar_t* str, wchar_t **endptr, int base, const wxXLocale& loc) -{ +{ IMPLEMENT_STRTOX_L_START long ret = wxStrtol(str, endptr, base); IMPLEMENT_STRTOX_L_END