#endif
#endif
-wxString wxString::FromAscii(const char *ascii)
+wxString wxString::FromAscii(const char *ascii, size_t len)
{
- if (!ascii)
+ if (!ascii || len == 0)
return wxEmptyString;
- size_t len = strlen(ascii);
wxString res;
- if ( len )
{
wxImplStringBuffer buf(res, len);
wxStringCharType *dest = buf;
- for ( ;; )
+ for ( ; len > 0; --len )
{
unsigned char c = (unsigned char)*ascii++;
wxASSERT_MSG( c < 0x80,
_T("Non-ASCII value passed to FromAscii().") );
*dest++ = (wchar_t)c;
-
- if ( c == '\0' )
- break;
}
}
return res;
}
+wxString wxString::FromAscii(const char *ascii)
+{
+ return FromAscii(ascii, wxStrlen(ascii));
+}
+
wxString wxString::FromAscii(const char ascii)
{
// What do we do with '\0' ?
if ( !buf )
{
// out of memory
+
+ // in UTF-8 build, leaving uninitialized junk in the buffer
+ // could result in invalid non-empty UTF-8 string, so just
+ // reset the string to empty on failure:
+ buf[0] = '\0';
return -1;
}
// we know that our own implementation of wxVsnprintf() returns -1
// only for a format error - thus there's something wrong with
// the user's format string
+ buf[0] = '\0';
return -1;
#else // possibly using system version
// assume it only returns error if there is not enough space, but