]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/string.cpp
Calculate correct client size for windows that are using deferred sizing.
[wxWidgets.git] / src / common / string.cpp
index 12c4204759d9302c8f1d18e3545589bdf3a0c544..5bb461cb176b4f019fd5609950f8d2b4c09c2e36 100644 (file)
 #include <string.h>
 #include <stdlib.h>
 
 #include <string.h>
 #include <stdlib.h>
 
-#ifndef __WXMSW__
-#include <errno.h>
-#endif
-
 #ifdef __SALFORDC__
   #include <clib.h>
 #endif
 #ifdef __SALFORDC__
   #include <clib.h>
 #endif
@@ -1817,7 +1813,7 @@ int wxString::PrintfV(const wxChar* pszFormat, va_list argptr)
     for ( ;; )
     {
         wxStringBuffer tmp(*this, size + 1);
     for ( ;; )
     {
         wxStringBuffer tmp(*this, size + 1);
-        wxCharbuf = tmp;
+        wxChar *buf = tmp;
 
         if ( !buf )
         {
 
         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
 
         // 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;
         }
             break;
         }
-#endif // EOVERFLOW
-
-        // still not enough, double it again
-        size *= 2;
     }
 
     // we could have overshot
     }
 
     // we could have overshot