]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/string.cpp
several bugs fixes
[wxWidgets.git] / src / common / string.cpp
index c2246e499151cd7ba6d47598d0a95dea457f9c10..a185a8ec26ac90f8cdd6bdda456db4c2b2563c86 100644 (file)
@@ -282,13 +282,22 @@ void wxString::Alloc(uint nLen)
 {
   wxStringData *pData = GetStringData();
   if ( pData->nAllocLength <= nLen ) {
-    if ( pData->IsEmpty() )
-      AllocBuffer(nLen);
+    if ( pData->IsEmpty() ) {
+      nLen += EXTRA_ALLOC;
+
+      wxStringData* pData = (wxStringData*)
+        malloc(sizeof(wxStringData) + (nLen + 1)*sizeof(char));
+      pData->nRefs = 1;
+      pData->nDataLength = 0;
+      pData->nAllocLength = nLen;
+      m_pchData = pData->data();  // data starts after wxStringData
+      m_pchData[0u] = '\0';
+    }
     else if ( pData->IsShared() ) {
       pData->Unlock();                // memory not freed because shared
-      uint nLen = pData->nDataLength;
+      uint nOldLen = pData->nDataLength;
       AllocBuffer(nLen);
-      memcpy(m_pchData, pData->data(), nLen*sizeof(char));
+      memcpy(m_pchData, pData->data(), nOldLen*sizeof(char));
     }
     else {
       nLen += EXTRA_ALLOC;