remove wxCSConv::MB2WC/WC2MB, implement Latin-1 fallback conversion in To/FromWChar() themselves; this is more efficient and removing the old code fixes off by 1 bugs in it (related to #9739)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54640 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-07-15 16:09:00 +00:00
parent 99ea81de15
commit 05392dc8c6
2 changed files with 26 additions and 40 deletions

View File

@@ -500,8 +500,6 @@ public:
const char *src, size_t srcLen = wxNO_LEN) const;
virtual size_t FromWChar(char *dst, size_t dstLen,
const wchar_t *src, size_t srcLen = wxNO_LEN) const;
virtual size_t MB2WC(wchar_t *outputBuf, const char *psz, size_t outputSize) const;
virtual size_t WC2MB(char *outputBuf, const wchar_t *psz, size_t outputSize) const;
virtual size_t GetMBNulLen() const;
#if wxUSE_UNICODE_UTF8

View File

@@ -3151,7 +3151,19 @@ size_t wxCSConv::ToWChar(wchar_t *dst, size_t dstLen,
return m_convReal->ToWChar(dst, dstLen, src, srcLen);
// latin-1 (direct)
return wxMBConv::ToWChar(dst, dstLen, src, srcLen);
if ( srcLen == wxNO_LEN )
srcLen = strlen(src) + 1; // take trailing NUL too
if ( dst )
{
if ( dstLen < srcLen )
return wxCONV_FAILED;
for ( size_t n = 0; n < srcLen; n++ )
dst[n] = (unsigned char)(src[n]);
}
return srcLen;
}
size_t wxCSConv::FromWChar(char *dst, size_t dstLen,
@@ -3163,57 +3175,33 @@ size_t wxCSConv::FromWChar(char *dst, size_t dstLen,
return m_convReal->FromWChar(dst, dstLen, src, srcLen);
// latin-1 (direct)
return wxMBConv::FromWChar(dst, dstLen, src, srcLen);
}
if ( srcLen == wxNO_LEN )
srcLen = wxWcslen(src) + 1;
size_t wxCSConv::MB2WC(wchar_t *buf, const char *psz, size_t n) const
if ( dst )
{
CreateConvIfNeeded();
if (m_convReal)
return m_convReal->MB2WC(buf, psz, n);
// latin-1 (direct)
size_t len = strlen(psz);
if (buf)
{
for (size_t c = 0; c <= len; c++)
buf[c] = (unsigned char)(psz[c]);
}
return len;
}
size_t wxCSConv::WC2MB(char *buf, const wchar_t *psz, size_t n) const
{
CreateConvIfNeeded();
if (m_convReal)
return m_convReal->WC2MB(buf, psz, n);
// latin-1 (direct)
const size_t len = wxWcslen(psz);
if (buf)
{
for (size_t c = 0; c <= len; c++)
{
if (psz[c] > 0xFF)
if ( dstLen < srcLen )
return wxCONV_FAILED;
buf[c] = (char)psz[c];
}
}
else
for ( size_t n = 0; n < srcLen; n++ )
{
for (size_t c = 0; c <= len; c++)
if ( src[n] > 0xFF )
return wxCONV_FAILED;
dst[n] = (char)src[n];
}
}
else // still need to check the input validity
{
if (psz[c] > 0xFF)
for ( size_t n = 0; n < srcLen; n++ )
{
if ( src[n] > 0xFF )
return wxCONV_FAILED;
}
}
return len;
return srcLen;
}
size_t wxCSConv::GetMBNulLen() const