]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/string.cpp
implementing pure carbon event behaviour, getting rid of doubly executed events
[wxWidgets.git] / src / common / string.cpp
index ffae5b4e127c85156ec36b5b77423ed4a3053fb7..5bb461cb176b4f019fd5609950f8d2b4c09c2e36 100644 (file)
 #include <string.h>
 #include <stdlib.h>
 
-#ifndef __WXMSW__
-#include <errno.h>
-#endif
-
 #ifdef __SALFORDC__
   #include <clib.h>
 #endif
@@ -365,8 +361,8 @@ bool wxStringBase::Alloc(size_t nLen)
     if ( pData->IsEmpty() ) {
       nLen += EXTRA_ALLOC;
 
-      wxStringData* pData = (wxStringData*)
-          malloc(sizeof(wxStringData) + (nLen + 1)*sizeof(wxChar));
+      pData = (wxStringData *)
+                malloc(sizeof(wxStringData) + (nLen + 1)*sizeof(wxChar));
 
       if ( pData == NULL ) {
         // allocation failure handled by caller
@@ -1817,7 +1813,7 @@ int wxString::PrintfV(const wxChar* pszFormat, va_list argptr)
     for ( ;; )
     {
         wxStringBuffer tmp(*this, size + 1);
-        wxCharbuf = tmp;
+        wxChar *buf = tmp;
 
         if ( !buf )
         {
@@ -1839,25 +1835,21 @@ int wxString::PrintfV(const wxChar* pszFormat, va_list argptr)
 
         // vsnprintf() may return either -1 (traditional Unix behaviour) or the
         // total number of characters which would have been written if the
-        // buffer were large enough
-        if ( len >= 0 && len <= size )
+        // buffer were large enough (newer standards such as Unix98)
+        if ( len < 0 )
         {
-            // ok, there was enough space
-            break;
+            // still not enough, as we don't know how much we need, double the
+            // current size of the buffer
+            size *= 2;
         }
-
-#ifdef EOVERFLOW
-        // if the error is not due to not having enough space (it could be e.g.
-        // EILSEQ), break too -- we'd just eat all available memory uselessly
-        if ( errno != EOVERFLOW )
+        else if ( len > size )
+        {
+            size = len;
+        }
+        else // ok, there was enough space
         {
-            // no sense in continuing
             break;
         }
-#endif // EOVERFLOW
-
-        // still not enough, double it again
-        size *= 2;
     }
 
     // we could have overshot