Fix initialization of SingleCharBuffer and Utf16CharBuffer data

Don't do it at all in the ctor, initializing just the first element of
the array is useless as it's overwritten by EncodeChar() anyhow, so just
leave the task of NUL-terminating the data to this function as well.

It might be even better to just have a ctor taking wxUniChar in these
classes instead and make EncodeChar() a trivial wrapper around it, but
for now just apply the minimal fix to repair the test breakage after the
last commit.

See https://github.com/wxWidgets/wxWidgets/pull/467#issuecomment-310384946
This commit is contained in:
Vadim Zeitlin
2017-06-22 15:51:49 +02:00
parent 4d3aaafc86
commit bfb893170e
2 changed files with 5 additions and 14 deletions

View File

@@ -48,14 +48,8 @@ struct WXDLLIMPEXP_BASE wxStringOperationsWchar
// encodes the characters as UTF-16:
struct Utf16CharBuffer
{
Utf16CharBuffer()
{
// Can't rely on default initialization of the member array, it
// doesn't work at all in very old compilers and works, but warns
// about working correctly (!) in even recent versions of MSVC
// (warning C4351), so do it manually.
data[0] = 0;
}
// Notice that data is left uninitialized, it is filled by EncodeChar()
// which is the only function creating objects of this class.
wchar_t data[3];
operator const wchar_t*() const { return data; }
@@ -69,12 +63,6 @@ struct WXDLLIMPEXP_BASE wxStringOperationsWchar
// representation
struct SingleCharBuffer
{
SingleCharBuffer()
{
// See comment above.
data[0] = 0;
}
wxChar data[2];
operator const wxChar*() const { return data; }
};
@@ -82,6 +70,7 @@ struct WXDLLIMPEXP_BASE wxStringOperationsWchar
{
SingleCharBuffer buf;
buf.data[0] = (wxChar)ch;
buf.data[1] = 0;
return buf;
}
static wxWxCharBuffer EncodeNChars(size_t n, const wxUniChar& ch);