X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a93cf225f709cd7d652707ffc37bdcd9f1d10e0c..12b5f4b4d2d8a07962da7ba3b78c8c1ec2634a67:/src/common/wxcrt.cpp diff --git a/src/common/wxcrt.cpp b/src/common/wxcrt.cpp index d6f7c35cda..bd30db8770 100644 --- a/src/common/wxcrt.cpp +++ b/src/common/wxcrt.cpp @@ -65,9 +65,9 @@ using namespace std ; #endif #if defined(__DARWIN__) - #include "wx/mac/corefoundation/cfref.h" + #include "wx/osx/core/cfref.h" #include - #include "wx/mac/corefoundation/cfstring.h" + #include "wx/osx/core/cfstring.h" #include #endif @@ -99,9 +99,9 @@ WXDLLIMPEXP_BASE size_t wxMB2WC(wchar_t *buf, const char *psz, size_t n) // support it (the only currently known example being Metrowerks, see // wx/crt.h) we don't use its mbstowcs() at all #ifdef HAVE_WCSRTOMBS - return mbsrtowcs((wchar_t *) NULL, &psz, 0, &mbstate); + return mbsrtowcs(NULL, &psz, 0, &mbstate); #else - return wxMbstowcs((wchar_t *) NULL, psz, 0); + return wxMbstowcs(NULL, psz, 0); #endif } @@ -126,34 +126,13 @@ WXDLLIMPEXP_BASE size_t wxWC2MB(char *buf, const wchar_t *pwz, size_t n) } #ifdef HAVE_WCSRTOMBS - return wcsrtombs((char *) NULL, &pwz, 0, &mbstate); + return wcsrtombs(NULL, &pwz, 0, &mbstate); #else - return wxWcstombs((char *) NULL, pwz, 0); + return wxWcstombs(NULL, pwz, 0); #endif } #endif // wxUSE_WCHAR_T -WXDLLIMPEXP_BASE bool wxOKlibc() -{ -#if wxUSE_WCHAR_T && defined(__UNIX__) && defined(__GLIBC__) && !defined(__WINE__) - // glibc 2.0 uses UTF-8 even when it shouldn't - wchar_t res = 0; - if ((MB_CUR_MAX == 2) && - (wxMB2WC(&res, "\xdd\xa5", 1) == 1) && - (res==0x765)) { - // 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) - 5, "utf-8"))) { - // nope, don't use libc conversion - return false; - } - } -#endif - return true; -} - char* wxSetlocale(int category, const char *locale) { #ifdef __WXWINCE__ @@ -325,7 +304,7 @@ static int vswscanf(const wchar_t *ws, const wchar_t *format, va_list argptr) wxCHECK_MSG( wxStrstr(format, _T("%c")) == NULL, -1, _T("incomplete vswscanf implementation doesn't allow %c") ); - return vsscanf(wx_static_cast(const char*, wxConvLibc.cWX2MB(ws)), + return vsscanf(static_cast(wxConvLibc.cWX2MB(ws)), wxConvLibc.cWX2MB(format), argptr); } #endif @@ -817,6 +796,42 @@ WXDLLIMPEXP_BASE wchar_t * wxCRT_StrdupW(const wchar_t *pwz) } #endif // wxCRT_StrdupW +#ifndef wxWCHAR_T_IS_WXCHAR16 +size_t wxStrlen(const wxChar16 *s ) +{ + if (!s) return 0; + size_t i=0; + while (*s!=0) { ++i; ++s; }; + return i; +} + +wxChar16* wxStrdup(const wxChar16* s) +{ + size_t size = (wxStrlen(s) + 1) * sizeof(wxChar16); + wxChar16 *ret = (wxChar16*) malloc(size); + memcpy(ret, s, size); + return ret; +} +#endif + +#ifndef wxWCHAR_T_IS_WXCHAR32 +size_t wxStrlen(const wxChar32 *s ) +{ + if (!s) return 0; + size_t i=0; + while (*s!=0) { ++i; ++s; }; + return i; +} + +wxChar32* wxStrdup(const wxChar32* s) +{ + size_t size = (wxStrlen(s) + 1) * sizeof(wxChar32); + wxChar32 *ret = (wxChar32*) malloc(size); + memcpy(ret, s, size); + return ret; +} +#endif + #ifndef wxCRT_StricmpA WXDLLIMPEXP_BASE int wxCRT_StricmpA(const char *psz1, const char *psz2) { @@ -896,7 +911,7 @@ WXDLLIMPEXP_BASE wchar_t* wxCRT_GetenvW(const wchar_t *name) // NB: buffer returned by getenv() is allowed to be overwritten next // time getenv() is called, so it is OK to use static string // buffer to hold the data. - static wxWCharBuffer value((wchar_t*)NULL); + static wxWCharBuffer value; value = wxConvLibc.cMB2WC(getenv(wxConvLibc.cWC2MB(name))); return value.data(); } @@ -1100,15 +1115,15 @@ static T *wxCRT_DoStrtok(T *psz, const T *delim, T **save_ptr) psz += wxStrspn(psz, delim); if (!*psz) { - *save_ptr = (T *)NULL; - return (T *)NULL; + *save_ptr = NULL; + return NULL; } T *ret = psz; psz = wxStrpbrk(psz, delim); if (!psz) { - *save_ptr = (T*)NULL; + *save_ptr = NULL; } else { @@ -1296,15 +1311,15 @@ int wxVsscanf(const char *str, const char *format, va_list ap) int wxVsscanf(const wchar_t *str, const wchar_t *format, va_list ap) { return wxCRT_VsscanfW(str, format, ap); } int wxVsscanf(const wxCharBuffer& str, const char *format, va_list ap) - { return wxCRT_VsscanfA(wx_static_cast(const char*, str), format, ap); } + { return wxCRT_VsscanfA(static_cast(str), format, ap); } int wxVsscanf(const wxWCharBuffer& str, const wchar_t *format, va_list ap) { return wxCRT_VsscanfW(str, format, ap); } int wxVsscanf(const wxString& str, const char *format, va_list ap) - { return wxCRT_VsscanfA(wx_static_cast(const char*, str.mb_str()), format, ap); } + { return wxCRT_VsscanfA(static_cast(str.mb_str()), format, ap); } int wxVsscanf(const wxString& str, const wchar_t *format, va_list ap) { return wxCRT_VsscanfW(str.wc_str(), format, ap); } int wxVsscanf(const wxCStrData& str, const char *format, va_list ap) - { return wxCRT_VsscanfA(wx_static_cast(const char*, str.AsCharBuf()), format, ap); } + { return wxCRT_VsscanfA(static_cast(str.AsCharBuf()), format, ap); } int wxVsscanf(const wxCStrData& str, const wchar_t *format, va_list ap) { return wxCRT_VsscanfW(str.AsWCharBuf(), format, ap); } #endif // HAVE_NO_VSSCANF