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:
@@ -500,8 +500,6 @@ public:
|
|||||||
const char *src, size_t srcLen = wxNO_LEN) const;
|
const char *src, size_t srcLen = wxNO_LEN) const;
|
||||||
virtual size_t FromWChar(char *dst, size_t dstLen,
|
virtual size_t FromWChar(char *dst, size_t dstLen,
|
||||||
const wchar_t *src, size_t srcLen = wxNO_LEN) const;
|
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;
|
virtual size_t GetMBNulLen() const;
|
||||||
|
|
||||||
#if wxUSE_UNICODE_UTF8
|
#if wxUSE_UNICODE_UTF8
|
||||||
|
@@ -3151,7 +3151,19 @@ size_t wxCSConv::ToWChar(wchar_t *dst, size_t dstLen,
|
|||||||
return m_convReal->ToWChar(dst, dstLen, src, srcLen);
|
return m_convReal->ToWChar(dst, dstLen, src, srcLen);
|
||||||
|
|
||||||
// latin-1 (direct)
|
// 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,
|
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);
|
return m_convReal->FromWChar(dst, dstLen, src, srcLen);
|
||||||
|
|
||||||
// latin-1 (direct)
|
// 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++)
|
if ( dstLen < srcLen )
|
||||||
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)
|
|
||||||
return wxCONV_FAILED;
|
return wxCONV_FAILED;
|
||||||
|
|
||||||
buf[c] = (char)psz[c];
|
for ( size_t n = 0; n < srcLen; n++ )
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
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 wxCONV_FAILED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return len;
|
return srcLen;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t wxCSConv::GetMBNulLen() const
|
size_t wxCSConv::GetMBNulLen() const
|
||||||
|
Reference in New Issue
Block a user