// allocates memory needed to store a C string of length nLen
void wxString::AllocBuffer(size_t nLen)
{
- wxASSERT( nLen > 0 ); //
- wxASSERT( nLen <= INT_MAX-1 ); // max size (enough room for 1 extra)
+ // allocating 0 sized buffer doesn't make sense, all empty strings should
+ // reuse g_strEmpty
+ wxASSERT( nLen > 0 );
+
+ // make sure that we don't overflow
+ wxASSERT( nLen < (INT_MAX / sizeof(wxChar)) -
+ (sizeof(wxStringData) + EXTRA_ALLOC + 1) );
STATISTICS_ADD(Length, nLen);
/* static */
wxString wxString::Format(const wxChar *pszFormat, ...)
{
- va_list argptr;
- va_start(argptr, pszFormat);
+ va_list argptr;
+ va_start(argptr, pszFormat);
- wxString s = FormatV(pszFormat, argptr);
+ wxString s;
+ s.PrintfV(pszFormat, argptr);
- va_end(argptr);
+ va_end(argptr);
- return s;
+ return s;
}
/* static */
if ( src.m_nCount > ARRAY_DEFAULT_INITIAL_SIZE )
Alloc(src.m_nCount);
- // we can't just copy the pointers here because otherwise we would share
- // the strings with another array because strings are ref counted
-#if 0
- if ( m_nCount != 0 )
- memcpy(m_pItems, src.m_pItems, m_nCount*sizeof(wxChar *));
-#endif // 0
-
for ( size_t n = 0; n < src.m_nCount; n++ )
Add(src[n]);
-
- // if the other array is auto sorted too, we're already sorted, but
- // otherwise we should rearrange the items
- if ( m_autoSort && !src.m_autoSort )
- Sort();
}
// grow the array