X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d71fa6fb2e2421b9d8deb826d60d5d8636665d91..457e6c54a28bc20cf347ba921755d7d5b296aa2a:/src/common/string.cpp?ds=sidebyside diff --git a/src/common/string.cpp b/src/common/string.cpp index efe9a4e186..3f8cfe19fd 100644 --- a/src/common/string.cpp +++ b/src/common/string.cpp @@ -64,15 +64,6 @@ // NB: EXTRA_ALLOC must be >= 0! #define EXTRA_ALLOC (19 - nLen % 16) -#if defined(__VISAGECPP__) && __IBMCPP__ >= 400 -// must define this in .cpp for VA or else you get multiply defined symbols everywhere - -// maximum possible length for a string means "take all string" everywhere -// (as sizeof(StringData) is unknown here, we substract 100) -const unsigned int wxSTRING_MAXLEN = UINT_MAX - 100; - -#endif - // --------------------------------------------------------------------------- // static class variables definition // --------------------------------------------------------------------------- @@ -94,6 +85,12 @@ static const struct wxChar dummy; } g_strEmpty = { {-1, 0, 0}, wxT('\0') }; +#if defined(__VISAGECPP__) && __IBMCPP__ >= 400 +// must define this static for VA or else you get multiply defined symbols everywhere +const unsigned int wxSTRING_MAXLEN = UINT_MAX - 100; + +#endif + // empty C style string: points to 'string data' byte of g_strEmpty extern const wxChar WXDLLEXPORT *wxEmptyString = &g_strEmpty.dummy; @@ -293,11 +290,11 @@ void wxString::InitWith(const wxChar *psz, size_t nPos, size_t nLength) { Init(); - wxASSERT( nPos <= wxStrlen(psz) ); - if ( nLength == wxSTRING_MAXLEN ) nLength = wxStrlen(psz + nPos); + wxASSERT_MSG( nPos + nLength <= wxStrlen(psz), _T("index out of bounds") ); + STATISTICS_ADD(InitialLength, nLength); if ( nLength > 0 ) { @@ -531,6 +528,12 @@ void wxString::UngetWriteBuf() GetStringData()->Validate(TRUE); } +void wxString::UngetWriteBuf(size_t nLen) +{ + GetStringData()->nDataLength = nLen; + GetStringData()->Validate(TRUE); +} + // --------------------------------------------------------------------------- // data access // --------------------------------------------------------------------------- @@ -1599,7 +1602,7 @@ size_t wxString::find_first_of(const wxChar* sz, size_t nStart) const const wxChar *start = c_str() + nStart; const wxChar *firstOf = wxStrpbrk(start, sz); if ( firstOf ) - return firstOf - start; + return firstOf - c_str(); else return npos; }