From 59646512e7a4de3f6c270d2ac1a8e00af47920cb Mon Sep 17 00:00:00 2001 From: Dahyeong Kim Date: Thu, 18 Apr 2013 19:45:57 +0900 Subject: [PATCH] Revert "Change the way to conver Mbs to Wcs and vice versa" This reverts commit d1e0b0650b91c00bed2cb03b840fb58d12486ab0 --- src/base/FBaseString.cpp | 24 ++++--- src/base/FBase_StringConverter.cpp | 21 +++++- src/base/inc/FBaseUtil_IcuConverter.h | 8 +-- src/base/utility/FBaseUtil_IcuConverter.cpp | 107 ---------------------------- 4 files changed, 35 insertions(+), 125 deletions(-) diff --git a/src/base/FBaseString.cpp b/src/base/FBaseString.cpp index 900b491..24dda81 100644 --- a/src/base/FBaseString.cpp +++ b/src/base/FBaseString.cpp @@ -38,7 +38,7 @@ #include #include #include -#include "FBaseUtil_IcuConverter.h" + namespace Tizen { namespace Base { @@ -127,23 +127,25 @@ String::String(const char* pValue) , __pValue(null) , __pStringImpl(null) { - if (pValue == null || strlen(pValue) == 0) + int len = (pValue != null) ? mbstowcs(null, pValue, 0) : 0; + + if (pValue == null) { result r = InitializeToDefault(DEFAULT_CAPACITY); SysTryReturnVoidResult(NID_BASE, r == E_SUCCESS, E_OUT_OF_MEMORY, "Memory allocation failed."); } else { - std::unique_ptr< wchar_t[] > pStr(Tizen::Base::Utility::ConvertMbsToWcsN(pValue)); - SysTryReturnVoidResult(NID_BASE, pStr != null, GetLastResult(), "Propagating."); + result r = InitializeToDefault(len + DEFAULT_CAPACITY); + SysTryReturnVoidResult(NID_BASE, r == E_SUCCESS, E_OUT_OF_MEMORY, "Memory allocation failed."); - int strLen = wcslen(pStr.get()); - std::unique_ptr pRefCntTemp(new (std::nothrow) int(1)); - SysTryReturnVoidResult(NID_BASE, pRefCntTemp != null, E_OUT_OF_MEMORY, "Memory allocation failed."); - __pRefCount = pRefCntTemp.release(); - __pValue = pStr.release(); - __length = strLen; - __capacity = strLen + 1; + len = mbstowcs(__pValue, pValue, len); + if (len == -1) + { + SysLog(NID_BASE, "Invalid encoding range[%s].", pValue); + } + __pValue[len] = '\0'; + __length = len; } } diff --git a/src/base/FBase_StringConverter.cpp b/src/base/FBase_StringConverter.cpp index be93bb2..05d8133 100644 --- a/src/base/FBase_StringConverter.cpp +++ b/src/base/FBase_StringConverter.cpp @@ -20,11 +20,13 @@ * @brief This is the implementation for _StringConverter class. */ +#include #include #include -#include #include "FBase_StringConverter.h" -#include "FBaseUtil_IcuConverter.h" +#include + + namespace Tizen { namespace Base { @@ -38,7 +40,20 @@ _StringConverter::CopyToCharArrayN(const String& str) char* _StringConverter::CopyToCharArrayN(const wchar_t* pValue) { - return Tizen::Base::Utility::ConvertWcsToMbsN(pValue); + char* pRet = null; + + int len = wcstombs(0, pValue, 0); + SysTryReturn(NID_BASE, len != -1, null, E_INVALID_ARG, "[%s] Invalid argument is used. Invalid string.", + GetErrorMessage(E_INVALID_ARG)); + + pRet = new (std::nothrow) char[len + 1]; + SysTryReturn(NID_BASE, pRet != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", + GetErrorMessage(E_OUT_OF_MEMORY)); + + len = wcstombs(pRet, pValue, len); + pRet[len] = 0; + + return pRet; } }} //Tizen::Base diff --git a/src/base/inc/FBaseUtil_IcuConverter.h b/src/base/inc/FBaseUtil_IcuConverter.h index c0a1e25..192622b 100644 --- a/src/base/inc/FBaseUtil_IcuConverter.h +++ b/src/base/inc/FBaseUtil_IcuConverter.h @@ -37,7 +37,10 @@ class _ICUConverter public: _ICUConverter(); ~_ICUConverter(); - static result GetResultFromIcuErrorCode(UErrorCode& err); + + private: + result GetResultFromIcuErrorCode(UErrorCode& err); + public: bool OpenConverter(const Tizen::Base::String& encodingScheme); wchar_t* ConvertToUcharN(const char* src, int srcLength); char* ConvertFromUcharN(const wchar_t* pSrc, int srcLength, int& retLength); @@ -47,9 +50,6 @@ class _ICUConverter UConverter* __pConverter; }; // _ICUConverter -char* ConvertWcsToMbsN(const wchar_t* pValue); -wchar_t* ConvertMbsToWcsN(const char* pValue); - }}} // Tizen::Base::Utility #endif // _FBASE_UTIL_ICU_CONVERTER_H_ diff --git a/src/base/utility/FBaseUtil_IcuConverter.cpp b/src/base/utility/FBaseUtil_IcuConverter.cpp index 38c4aa7..1569e34 100644 --- a/src/base/utility/FBaseUtil_IcuConverter.cpp +++ b/src/base/utility/FBaseUtil_IcuConverter.cpp @@ -201,111 +201,4 @@ _ICUConverter::GetResultFromIcuErrorCode(UErrorCode& err) } return E_SUCCESS; } - -char* -ConvertWcsToMbsN(const wchar_t* pValue) -{ - SysTryReturn(NID_BASE_UTIL, pValue != null, null, E_INVALID_ARG, "[%s] Invalid argument is used. The pValue is null.", GetErrorMessage(E_INVALID_ARG)); - - int len = wcslen(pValue); - SysTryReturn(NID_BASE_UTIL, len != 0, null, E_INVALID_ARG, "[%s] Invalid argument is used. The pValue is an empty string.", GetErrorMessage(E_INVALID_ARG)); - - UErrorCode err = U_ZERO_ERROR; - UConverter* pConverter = ucnv_open("UTF-8", &err); - - result r = _ICUConverter::GetResultFromIcuErrorCode(err); - SysTryReturn(NID_BASE_UTIL, r == E_SUCCESS, null, r, "[%s] The err must be U_ZERO_ERROR.", GetErrorMessage(r)); - - ucnv_setFromUCallBack(pConverter, UCNV_FROM_U_CALLBACK_STOP, null, null, null, &err); - - int icuStrLen = len * 2; - UChar* pIcuStr = new (std::nothrow) UChar[icuStrLen]; - SysTryReturn(NID_BASE_UTIL, pIcuStr != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY)); - - int outLen = 0; - UChar* pResultStr = u_strFromWCS(pIcuStr, icuStrLen, &outLen, pValue, len, &err); - - char* pOutBuf = null; - if (U_SUCCESS(err)) - { - char* pTmpOut = null; - int outBytesLeftOut = len * 4; - pOutBuf = new (std::nothrow) char[outBytesLeftOut + 1]; - SysTryCatch(NID_BASE_UTIL, pOutBuf != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY)); - - pTmpOut = pOutBuf; - memset(pOutBuf, 0, outBytesLeftOut + 1); - int retLength = ucnv_fromUChars(pConverter, pTmpOut, outBytesLeftOut, pResultStr, outLen, &err); - - r = _ICUConverter::GetResultFromIcuErrorCode(err); - if (IsFailed(r)) - { - delete[] pOutBuf; - pOutBuf = null; - } - } - -CATCH: - if (pConverter) - { - ucnv_close(pConverter); - pConverter = null; - } - delete[] pIcuStr; - pIcuStr = null; - SetLastResult(r); - return pOutBuf; -} - -wchar_t* -ConvertMbsToWcsN(const char* pValue) -{ - int len = strlen(pValue); - SysTryReturn(NID_BASE_UTIL, len != 0, null, E_INVALID_ARG, "[%s] Invalid argument is used. The pValue is an empty string.", GetErrorMessage(E_INVALID_ARG)); - - UErrorCode err = U_ZERO_ERROR; - UConverter* pConverter = ucnv_open("UTF-8", &err); - - result r = _ICUConverter::GetResultFromIcuErrorCode(err); - SysTryReturn(NID_BASE_UTIL, r == E_SUCCESS, null, r, "[%s] The err must be U_ZERO_ERROR.", GetErrorMessage(r)); - - ucnv_setFromUCallBack(pConverter, UCNV_FROM_U_CALLBACK_STOP, null, null, null, &err); - - int icuStrLen = len + 1; - UChar* pIcuStr = new (std::nothrow) UChar[icuStrLen]; - SysTryReturn(NID_BASE_UTIL, pIcuStr != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY)); - memset(pIcuStr, 0, sizeof(UChar) * (icuStrLen)); - - const char* pTmpIn = pValue; - signed int retLength = ucnv_toUChars(pConverter, pIcuStr, icuStrLen, pTmpIn, len, &err); - - wchar_t* pDst = null; - wchar_t* pResultStr = null; - if (U_SUCCESS(err)) - { - pDst = new (std::nothrow) wchar_t[retLength + 1]; - SysTryCatch(NID_BASE_UTIL, pDst != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY)); - memset(pDst, 0, sizeof(wchar_t) * (retLength + 1)); - pResultStr = u_strToWCS(pDst, retLength, &retLength, pIcuStr, retLength, &err); - - r = _ICUConverter::GetResultFromIcuErrorCode(err); - if (IsFailed(r)) - { - delete[] pDst; - pDst = null; - } - } - -CATCH: - if (pConverter) - { - ucnv_close(pConverter); - pConverter = null; - } - SetLastResult(r); - delete[] pIcuStr; - pIcuStr = null; - return pResultStr; -} - } } } // Tizen::Base::Utility -- 2.7.4