| Index: core/fxcrt/fx_basic_bstring.cpp
|
| diff --git a/core/fxcrt/fx_basic_bstring.cpp b/core/fxcrt/fx_basic_bstring.cpp
|
| index 4a48539578ee5d956d8581e70df766f24a04ffdd..23fdcaa25ea02266385a1640b9c8adf78c4c0a51 100644
|
| --- a/core/fxcrt/fx_basic_bstring.cpp
|
| +++ b/core/fxcrt/fx_basic_bstring.cpp
|
| @@ -719,17 +719,30 @@ FX_STRSIZE CFX_ByteString::Remove(FX_CHAR chRemove) {
|
| if (!m_pData || m_pData->m_nDataLength < 1)
|
| return 0;
|
|
|
| - ReallocBeforeWrite(m_pData->m_nDataLength);
|
| FX_CHAR* pstrSource = m_pData->m_String;
|
| - FX_CHAR* pstrDest = m_pData->m_String;
|
| FX_CHAR* pstrEnd = m_pData->m_String + m_pData->m_nDataLength;
|
| while (pstrSource < pstrEnd) {
|
| + if (*pstrSource == chRemove)
|
| + break;
|
| + pstrSource++;
|
| + }
|
| + if (pstrSource == pstrEnd)
|
| + return 0;
|
| +
|
| + ptrdiff_t copied = pstrSource - m_pData->m_String;
|
| + ReallocBeforeWrite(m_pData->m_nDataLength);
|
| + pstrSource = m_pData->m_String + copied;
|
| + pstrEnd = m_pData->m_String + m_pData->m_nDataLength;
|
| +
|
| + FX_CHAR* pstrDest = pstrSource;
|
| + while (pstrSource < pstrEnd) {
|
| if (*pstrSource != chRemove) {
|
| *pstrDest = *pstrSource;
|
| pstrDest++;
|
| }
|
| pstrSource++;
|
| }
|
| +
|
| *pstrDest = 0;
|
| FX_STRSIZE nCount = (FX_STRSIZE)(pstrSource - pstrDest);
|
| m_pData->m_nDataLength -= nCount;
|
|
|