fix support for using asterisks in the format string and some code cleanup

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@60120 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2009-04-12 23:37:28 +00:00
parent 6aea1e4a70
commit 75ac34cefc
3 changed files with 142 additions and 72 deletions

View File

@@ -142,9 +142,16 @@ static int wxDoVsnprintf(CharType *buf, size_t lenMax,
const CharType *toparse = format;
for (i=0; i < parser.nargs; i++)
{
wxPrintfConvSpec<CharType>& spec = parser.specs[i];
// skip any asterisks, they're processed as part of the conversion they
// apply to
if ( spec.m_type == wxPAT_STAR )
continue;
// copy in the output buffer the portion of the format string between
// last specifier and the current one
size_t tocopy = ( parser.arg[i].m_pArgPos - toparse );
size_t tocopy = ( spec.m_pArgPos - toparse );
lenCur += wxCopyStrWithPercents(lenMax - lenCur, buf + lenCur,
tocopy, toparse);
@@ -155,8 +162,8 @@ static int wxDoVsnprintf(CharType *buf, size_t lenMax,
}
// process this specifier directly in the output buffer
int n = parser.arg[i].Process(buf+lenCur, lenMax - lenCur,
&argdata[parser.arg[i].m_pos], lenCur);
int n = spec.Process(buf+lenCur, lenMax - lenCur,
&argdata[spec.m_pos], lenCur);
if (n == -1)
{
buf[lenMax-1] = wxT('\0'); // be sure to always NUL-terminate the string
@@ -166,7 +173,7 @@ static int wxDoVsnprintf(CharType *buf, size_t lenMax,
// the +1 is because wxPrintfConvSpec::m_pArgEnd points to the last character
// of the format specifier, but we are not interested to it...
toparse = parser.arg[i].m_pArgEnd + 1;
toparse = spec.m_pArgEnd + 1;
}
// copy portion of the format string after last specifier