#else
p->pad_char;
+#if wxUSE_WCHAR_T
if (type == wxPAT_WCHAR) {
// user passed a character explicitely indicated as Unicode...
const wchar_t buf[2] = { p->pad_wchar, 0 };
val = wxString(buf, wxConvLibc)[0u];
}
+#endif
#endif
size_t i;
if (type == wxPAT_PCHAR) {
// user passed a string explicitely indicated as ANSI...
- val = wxString(p->pad_pchar, wxConvLibc);
+ val = s = wxString(p->pad_pchar, wxConvLibc);
}
#else
p->pad_pchar;
+#if wxUSE_WCHAR_T
if (type == wxPAT_PWCHAR) {
// user passed a string explicitely indicated as Unicode...
- val = wxString(p->pad_pwchar, wxConvLibc);
+ val = s = wxString(p->pad_pwchar, wxConvLibc);
}
+#endif
#endif
int len;
if (val)
{
#if wxUSE_STRUTILS
- len = wxMin(max_width, wxStrlen(val));
+ // at this point we are sure that max_width is positive or null
+ // (see top of wxPrintfConvSpec::LoadArg)
+ len = wxMin((unsigned int)max_width, wxStrlen(val));
#else
for ( len = 0; val[len] && (len < max_width); len++ )
;
}
#if wxUSE_STRUTILS
- len = wxMin(len, lenMax-lenCur);
+ // at this point we are sure that max_width is positive or null
+ // (see top of wxPrintfConvSpec::LoadArg)
+ len = wxMin((unsigned int)len, lenMax-lenCur);
wxStrncpy(buf+lenCur, val, len);
lenCur += len;
#else
return -1; // format strings with both positional and
// non-positional conversion specifier are unsupported !!
+ // on platforms where va_list is an array type, it is necessary to make a
+ // copy to be able to pass it to LoadArg as a reference.
+ bool ok = true;
+ va_list ap;
+ wxVaCopy(ap, argptr);
+
// now load arguments from stack
- for (i=0; i < nargs; i++) {
- if (!pspec[i])
- return -1; // user forgot a positional parameter (e.g. %$1s %$3s) ?
- if (!pspec[i]->LoadArg(&argdata[i], argptr))
- return -1; // this means that wxPrintfConvSpec::Parse failed
- // to set its 'type' to a valid value...
+ for (i=0; i < nargs && ok; i++) {
+ // !pspec[i] if user forgot a positional parameter (e.g. %$1s %$3s) ?
+ // or LoadArg false if wxPrintfConvSpec::Parse failed to set its 'type'
+ // to a valid value...
+ ok = pspec[i] && pspec[i]->LoadArg(&argdata[i], ap);
}
+ va_end(ap);
+
+ if (!ok)
+ return -1;
+
// finally, process each conversion specifier with its own argument
toparse = format;
for (i=0; i < nargs; i++)