X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9348da2fc0395dfe8704cb7e618f7b129f054865..d68d85908b4f6073ae1c100abe3d9469fcd451d9:/src/common/wxchar.cpp diff --git a/src/common/wxchar.cpp b/src/common/wxchar.cpp index 0f8b05a3e4..0f8e76ccbb 100644 --- a/src/common/wxchar.cpp +++ b/src/common/wxchar.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: wxchar.cpp +// Name: src/common/wxchar.cpp // Purpose: wxChar implementation // Author: Ove Kåven // Modified by: Ron Lee @@ -9,10 +9,6 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "wxchar.h" -#endif - // =========================================================================== // headers, declarations, constants // =========================================================================== @@ -21,7 +17,7 @@ #include "wx/wxprec.h" #ifdef __BORLANDC__ - #pragma hdrstop + #pragma hdrstop #endif #define _ISOC9X_SOURCE 1 // to get vsscanf() @@ -32,24 +28,23 @@ #include #ifndef __WXWINCE__ -#include -#include + #include + #include #else -#include "wx/msw/wince/time.h" + #include "wx/msw/wince/time.h" #endif #ifndef WX_PRECOMP - #include "wx/defs.h" - #include "wx/wxchar.h" - #include "wx/string.h" - #include "wx/hash.h" + #include "wx/wxchar.h" + #include "wx/string.h" + #include "wx/hash.h" #endif #if defined(__WIN32__) && defined(wxNEED_WX_CTYPE_H) #include - #include - #include - #include + #include + #include + #include #endif #if defined(__MWERKS__) && __MSL__ >= 0x6000 @@ -65,7 +60,7 @@ using namespace std ; size_t WXDLLEXPORT wxMB2WC(wchar_t *buf, const char *psz, size_t n) { // assume that we have mbsrtowcs() too if we have wcsrtombs() -#if HAVE_WCSRTOMBS +#ifdef HAVE_WCSRTOMBS mbstate_t mbstate; memset(&mbstate, 0, sizeof(mbstate_t)); #endif @@ -78,20 +73,26 @@ size_t WXDLLEXPORT wxMB2WC(wchar_t *buf, const char *psz, size_t n) #ifdef HAVE_WCSRTOMBS return mbsrtowcs(buf, &psz, n, &mbstate); #else - return mbstowcs(buf, psz, n); + return wxMbstowcs(buf, psz, n); #endif } + // note that we rely on common (and required by Unix98 but unfortunately not + // C99) extension which allows to call mbs(r)towcs() with NULL output pointer + // to just get the size of the needed buffer -- this is needed as otherwise + // we have no idea about how much space we need and if the CRT doesn't + // support it (the only currently known example being Metrowerks, see + // wx/wxchar.h) we don't use its mbstowcs() at all #ifdef HAVE_WCSRTOMBS return mbsrtowcs((wchar_t *) NULL, &psz, 0, &mbstate); #else - return mbstowcs((wchar_t *) NULL, psz, 0); + return wxMbstowcs((wchar_t *) NULL, psz, 0); #endif } size_t WXDLLEXPORT wxWC2MB(char *buf, const wchar_t *pwz, size_t n) { -#if HAVE_WCSRTOMBS +#ifdef HAVE_WCSRTOMBS mbstate_t mbstate; memset(&mbstate, 0, sizeof(mbstate_t)); #endif @@ -102,17 +103,17 @@ size_t WXDLLEXPORT wxWC2MB(char *buf, const wchar_t *pwz, size_t n) if (n) *buf = '\0'; return 0; } -#if HAVE_WCSRTOMBS +#ifdef HAVE_WCSRTOMBS return wcsrtombs(buf, &pwz, n, &mbstate); #else - return wcstombs(buf, pwz, n); + return wxWcstombs(buf, pwz, n); #endif } -#if HAVE_WCSRTOMBS +#ifdef HAVE_WCSRTOMBS return wcsrtombs((char *) NULL, &pwz, 0, &mbstate); #else - return wcstombs((char *) NULL, pwz, 0); + return wxWcstombs((char *) NULL, pwz, 0); #endif } #endif // wxUSE_WCHAR_T @@ -1070,9 +1071,9 @@ WXDLLEXPORT int wxTolower(wxChar ch) { return (wxChar)CharLower((LPTSTR)(ch)); } WXDLLEXPORT int wxToupper(wxChar ch) { return (wxChar)CharUpper((LPTSTR)(ch)); } #endif -#if defined(__DARWIN__) && ( MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_2 ) +#ifdef wxNEED_WX_MBSTOWCS -WXDLLEXPORT size_t wxInternalMbstowcs (wchar_t * out, const char * in, size_t outlen) +WXDLLEXPORT size_t wxMbstowcs (wchar_t * out, const char * in, size_t outlen) { if (!out) { @@ -1094,7 +1095,7 @@ WXDLLEXPORT size_t wxInternalMbstowcs (wchar_t * out, const char * in, size_t ou return in - origin; } -WXDLLEXPORT size_t wxInternalWcstombs (char * out, const wchar_t * in, size_t outlen) +WXDLLEXPORT size_t wxWcstombs (char * out, const wchar_t * in, size_t outlen) { if (!out) { @@ -1116,6 +1117,8 @@ WXDLLEXPORT size_t wxInternalWcstombs (char * out, const wchar_t * in, size_t ou return in - origin; } +#endif // wxNEED_WX_MBSTOWCS + #if defined(wxNEED_WX_CTYPE_H) #include @@ -1147,8 +1150,6 @@ WXDLLEXPORT int wxToupper(wxChar ch) { return (wxChar)toupper((char)(ch)); } #endif // wxNEED_WX_CTYPE_H -#endif // defined(__DARWIN__) and OSX <= 10.2 - #ifndef wxStrdupA WXDLLEXPORT char *wxStrdupA(const char *s) @@ -1199,9 +1200,9 @@ int WXDLLEXPORT wxStrnicmp(const wxChar *s1, const wxChar *s2, size_t n) #ifndef wxSetlocale WXDLLEXPORT wxWCharBuffer wxSetlocale(int category, const wxChar *locale) { - char *localeOld = setlocale(category, wxConvLocal.cWX2MB(locale)); + char *localeOld = setlocale(category, wxConvLibc.cWX2MB(locale)); - return wxWCharBuffer(wxConvLocal.cMB2WC(localeOld)); + return wxWCharBuffer(wxConvLibc.cMB2WC(localeOld)); } #endif @@ -1369,7 +1370,7 @@ WXDLLEXPORT double wxStrtod(const wxChar *nptr, wxChar **endptr) } wxString data(nptr, nptr-start); - wxWX2MBbuf dat = data.mb_str(wxConvLocal); + wxWX2MBbuf dat = data.mb_str(wxConvLibc); char *rdat = wxMBSTRINGCAST dat; double ret = strtod(dat, &rdat); @@ -1397,7 +1398,7 @@ WXDLLEXPORT long int wxStrtol(const wxChar *nptr, wxChar **endptr, int base) (wxIsalpha(*nptr) && (wxToupper(*nptr) - wxT('A') + 10 < base))) nptr++; wxString data(start, nptr-start); - wxWX2MBbuf dat = data.mb_str(wxConvLocal); + wxWX2MBbuf dat = data.mb_str(wxConvLibc); char *rdat = wxMBSTRINGCAST dat; long int ret = strtol(dat, &rdat, base); @@ -1451,10 +1452,10 @@ double WXDLLEXPORT wxAtof(const wxChar *psz) wxString str(psz); if (str.ToDouble(& d)) return d; - else - return 0.0; + + return 0.0; #else - return atof(wxConvLocal.cWX2MB(psz)); + return atof(wxConvLibc.cWX2MB(psz)); #endif } #endif @@ -1462,12 +1463,12 @@ double WXDLLEXPORT wxAtof(const wxChar *psz) #ifdef wxNEED_WX_STDLIB_H int WXDLLEXPORT wxAtoi(const wxChar *psz) { - return atoi(wxConvLocal.cWX2MB(psz)); + return atoi(wxConvLibc.cWX2MB(psz)); } long WXDLLEXPORT wxAtol(const wxChar *psz) { - return atol(wxConvLocal.cWX2MB(psz)); + return atol(wxConvLibc.cWX2MB(psz)); } wxChar * WXDLLEXPORT wxGetenv(const wxChar *name) @@ -1477,7 +1478,7 @@ wxChar * WXDLLEXPORT wxGetenv(const wxChar *name) // time getenv() is called, so it is OK to use static string // buffer to hold the data. static wxWCharBuffer value((wxChar*)NULL); - value = wxConvLocal.cMB2WX(getenv(wxConvLocal.cWX2MB(name))); + value = wxConvLibc.cMB2WX(getenv(wxConvLibc.cWX2MB(name))); return value.data(); #else return getenv(name); @@ -1486,7 +1487,7 @@ wxChar * WXDLLEXPORT wxGetenv(const wxChar *name) int WXDLLEXPORT wxSystem(const wxChar *psz) { - return system(wxConvLocal.cWX2MB(psz)); + return system(wxConvLibc.cWX2MB(psz)); } #endif // wxNEED_WX_STDLIB_H @@ -1500,7 +1501,7 @@ wxStrftime(wxChar *s, size_t maxsize, const wxChar *fmt, const struct tm *tm) wxCharBuffer buf(maxsize); - wxCharBuffer bufFmt(wxConvLocal.cWX2MB(fmt)); + wxCharBuffer bufFmt(wxConvLibc.cWX2MB(fmt)); if ( !bufFmt ) return 0; @@ -1508,7 +1509,7 @@ wxStrftime(wxChar *s, size_t maxsize, const wxChar *fmt, const struct tm *tm) if ( !ret ) return 0; - wxWCharBuffer wbuf = wxConvLocal.cMB2WX(buf); + wxWCharBuffer wbuf = wxConvLibc.cMB2WX(buf); if ( !wbuf ) return 0; @@ -1578,7 +1579,7 @@ WXDLLEXPORT wxChar * wxStrtok(wxChar *psz, const wxChar *delim, wxChar **save_pt // missing C RTL functions // ---------------------------------------------------------------------------- -#if wxNEED_STRDUP +#ifdef wxNEED_STRDUP char *strdup(const char *s) { @@ -1600,3 +1601,11 @@ void *calloc( size_t num, size_t size ) #endif // __WXWINCE__ <= 211 +#ifdef __WXWINCE__ + +int wxRemove(const wxChar *path) +{ + return ::DeleteFile(path) == 0; +} + +#endif