// put string back in a reasonable state after GetWriteBuf
void wxString::UngetWriteBuf()
{
- GetStringData()->nDataLength = wxStrlen(m_pchData);
- GetStringData()->Validate(true);
+ UngetWriteBuf(wxStrlen(m_pchData));
}
void wxString::UngetWriteBuf(size_t nLen)
{
- GetStringData()->nDataLength = nLen;
- GetStringData()->Validate(true);
+ wxStringData * const pData = GetStringData();
+
+ wxASSERT_MSG( nLen < pData->nAllocLength, _T("buffer overrun") );
+
+ // the strings we store are always NUL-terminated
+ pData->data()[nLen] = _T('\0');
+ pData->nDataLength = nLen;
+ pData->Validate(true);
}
-#endif
+#endif // !wxUSE_STL
// ---------------------------------------------------------------------------
// data access
// the implementation of all the functions below is exactly the same so factor
// it out
-#ifdef __WATCOMC__
- #define STR2INTLINK _WCRTLINK
-#else
- #define STR2INTLINK
-#endif
-
-template <typename T>
+template <typename T, typename F>
bool wxStringToIntType(const wxChar *start,
T *val,
int base,
- T STR2INTLINK (*func)(const wxChar *, wxChar **, int))
+ F func)
{
wxCHECK_MSG( val, false, _T("NULL output pointer") );
wxASSERT_MSG( !base || (base > 1 && base <= 36), _T("invalid base") );