X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9a08c20ec23c76032ae062a2935c6c4d7ae489f2..ddc80eb4eb7e96ff23ebe329283bb2b940dd1df2:/src/common/string.cpp?ds=sidebyside diff --git a/src/common/string.cpp b/src/common/string.cpp index 501c4694ae..d5c51592e0 100644 --- a/src/common/string.cpp +++ b/src/common/string.cpp @@ -10,10 +10,6 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "string.h" -#endif - /* * About ref counting: * 1) all empty strings use g_strEmpty, nRefs = -1 (set in Init()) @@ -1796,54 +1792,51 @@ wxString wxString::FormatV(const wxChar *pszFormat, va_list argptr) int wxString::Printf(const wxChar *pszFormat, ...) { - va_list argptr; - va_start(argptr, pszFormat); + va_list argptr; + va_start(argptr, pszFormat); - int iLen = PrintfV(pszFormat, argptr); + int iLen = PrintfV(pszFormat, argptr); - va_end(argptr); + va_end(argptr); - return iLen; + return iLen; } int wxString::PrintfV(const wxChar* pszFormat, va_list argptr) { int size = 1024; - int len; for ( ;; ) { + wxStringBuffer tmp(*this, size + 1); + wxChar* buf = tmp; + + if ( !buf ) { - wxStringBuffer tmp(*this, size + 1); - wxChar* buf = tmp; + // out of memory + return -1; + } - if ( !buf ) - { - // out of memory - return -1; - } + // wxVsnprintf() may modify the original arg pointer, so pass it + // only a copy + va_list argptrcopy; + wxVaCopy(argptrcopy, argptr); + int len = wxVsnprintf(buf, size, pszFormat, argptrcopy); + va_end(argptrcopy); - // wxVsnprintf() may modify the original arg pointer, so pass it - // only a copy - va_list argptrcopy; - wxVaCopy(argptrcopy, argptr); - len = wxVsnprintf(buf, size, pszFormat, argptrcopy); - va_end(argptrcopy); - - // some implementations of vsnprintf() don't NUL terminate - // the string if there is not enough space for it so - // always do it manually - buf[size] = _T('\0'); - } + // some implementations of vsnprintf() don't NUL terminate + // the string if there is not enough space for it so + // always do it manually + buf[size] = _T('\0'); // 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 // also, it may return an errno may be something like EILSEQ, // in which case we need to break out - if ( (len >= 0 && len <= size) - // No EOVERFLOW on Windows -#ifndef __WXMSW__ + if ( (len >= 0 && len <= size) + // No EOVERFLOW on Windows nor Palm 6.0 nor OpenVMS +#if !defined(__WXMSW__) && !defined(__WXPALMOS__) && !defined( __VMS ) || errno != EOVERFLOW #endif )