X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9d55bfef2cb35ac07972e76c786d265c9b35d230..4c7d530a267f11be1e9cf20d7bfa5313286fee1c:/include/wx/wxcrt.h diff --git a/include/wx/wxcrt.h b/include/wx/wxcrt.h index 815cbd2a12..662ea9758d 100644 --- a/include/wx/wxcrt.h +++ b/include/wx/wxcrt.h @@ -19,8 +19,11 @@ #include "wx/wxcrtbase.h" #include "wx/string.h" -#if defined (__VISUALC__) || defined (__DMC__) - #define HAVE_NO_VSSCANF 1 +#ifndef __WX_SETUP_H__ +// For non-configure builds assume vsscanf is available, if not Visual C or DMC +#if !defined (__VISUALC__) && !defined (__DMC__) + #define HAVE_VSSCANF 1 +#endif #endif // ============================================================================ @@ -36,9 +39,6 @@ inline bool wxIsEmpty(const wxString& s) { return s.empty(); } inline bool wxIsEmpty(const wxCStrData& s) { return s.AsString().empty(); } -// FIXME-UTF8: get rid of this, it's ANSI only anyway -WXDLLIMPEXP_BASE bool wxOKlibc(); /* for internal use */ - /* multibyte to wide char conversion functions and macros */ @@ -181,6 +181,36 @@ inline size_t wxStrlen(const wxWCharBuffer& s) { return wxStrlen(s.data()); } inline size_t wxStrlen(const wxString& s) { return s.length(); } inline size_t wxStrlen(const wxCStrData& s) { return s.AsString().length(); } +// this is a function new in 2.9 so we don't care about backwards compatibility and +// so don't need to support wxCharBuffer/wxWCharBuffer overloads +#if defined(wxCRT_StrnlenA) +inline size_t wxStrnlen(const char *str, size_t maxlen) { return wxCRT_StrnlenA(str, maxlen); } +#else +inline size_t wxStrnlen(const char *str, size_t maxlen) +{ + size_t n; + for ( n = 0; n < maxlen; n++ ) + if ( !str[n] ) + break; + + return n; +} +#endif + +#if defined(wxCRT_StrnlenW) +inline size_t wxStrnlen(const wchar_t *str, size_t maxlen) { return wxCRT_StrnlenW(str, maxlen); } +#else +inline size_t wxStrnlen(const wchar_t *str, size_t maxlen) +{ + size_t n; + for ( n = 0; n < maxlen; n++ ) + if ( !str[n] ) + break; + + return n; +} +#endif + // NB: these are defined in wxcrtbase.h, see the comment there // inline char* wxStrdup(const char *s) { return wxStrdupA(s); } // inline wchar_t* wxStrdup(const wchar_t *s) { return wxStrdupW(s); } @@ -231,6 +261,36 @@ inline char *wxStrncpy(char *dest, const wchar_t *src, size_t n) inline wchar_t *wxStrncpy(wchar_t *dest, const char *src, size_t n) { return wxCRT_StrncpyW(dest, wxConvLibc.cMB2WC(src), n); } +// this is a function new in 2.9 so we don't care about backwards compatibility and +// so don't need to support wchar_t/char overloads +inline size_t wxStrlcpy(char *dest, const char *src, size_t n) +{ + const size_t len = wxCRT_StrlenA(src); + + if ( n ) + { + if ( n-- > len ) + n = len; + wxCRT_StrncpyA(dest, src, n); + dest[n] = '\0'; + } + + return len; +} +inline size_t wxStrlcpy(wchar_t *dest, const wchar_t *src, size_t n) +{ + const size_t len = wxCRT_StrlenW(src); + if ( n ) + { + if ( n-- > len ) + n = len; + wxCRT_StrncpyW(dest, src, n); + dest[n] = L'\0'; + } + + return len; +} + inline char *wxStrcat(char *dest, const char *src) { return wxCRT_StrcatA(dest, src); } inline wchar_t *wxStrcat(wchar_t *dest, const wchar_t *src) @@ -453,8 +513,7 @@ inline size_t wxStrspn_String(const wxString& s1, const T& s2) size_t pos = s1.find_first_not_of(s2); return pos == wxString::npos ? s1.length() : pos; } -WX_STR_FUNC_NO_INVERT(size_t, wxStrspn, - wxCRT_StrspnA, wxCRT_StrspnW, wxStrspn_String) +WX_STR_FUNC(size_t, wxStrspn, wxCRT_StrspnA, wxCRT_StrspnW, wxStrspn_String) template inline size_t wxStrcspn_String(const wxString& s1, const T& s2) @@ -462,8 +521,7 @@ inline size_t wxStrcspn_String(const wxString& s1, const T& s2) size_t pos = s1.find_first_of(s2); return pos == wxString::npos ? s1.length() : pos; } -WX_STR_FUNC_NO_INVERT(size_t, wxStrcspn, - wxCRT_StrcspnA, wxCRT_StrcspnW, wxStrcspn_String) +WX_STR_FUNC(size_t, wxStrcspn, wxCRT_StrcspnA, wxCRT_StrcspnW, wxStrcspn_String) #undef WX_STR_DECL #undef WX_STR_CALL