| Index: base/i18n/icu_string_conversions.cc
|
| ===================================================================
|
| --- base/i18n/icu_string_conversions.cc (revision 31509)
|
| +++ base/i18n/icu_string_conversions.cc (working copy)
|
| @@ -157,8 +157,6 @@
|
|
|
| // Codepage <-> Wide/UTF-16 ---------------------------------------------------
|
|
|
| -// Convert a UTF-16 string into the specified codepage_name. If the codepage
|
| -// isn't found, return false.
|
| bool UTF16ToCodepage(const string16& utf16,
|
| const char* codepage_name,
|
| OnStringConversionError::Type on_error,
|
| @@ -174,11 +172,10 @@
|
| static_cast<int>(utf16.length()), on_error, encoded);
|
| }
|
|
|
| -bool CodepageToUTF16AndAdjustOffset(const std::string& encoded,
|
| - const char* codepage_name,
|
| - OnStringConversionError::Type on_error,
|
| - string16* utf16,
|
| - size_t* offset_for_adjustment) {
|
| +bool CodepageToUTF16(const std::string& encoded,
|
| + const char* codepage_name,
|
| + OnStringConversionError::Type on_error,
|
| + string16* utf16) {
|
| utf16->clear();
|
|
|
| UErrorCode status = U_ZERO_ERROR;
|
| @@ -197,40 +194,9 @@
|
| size_t uchar_max_length = encoded.length() + 1;
|
|
|
| SetUpErrorHandlerForToUChars(on_error, converter, &status);
|
| - char16* byte_buffer = WriteInto(utf16, uchar_max_length);
|
| - int byte_buffer_length = static_cast<int>(uchar_max_length);
|
| - const char* data = encoded.data();
|
| - int length = static_cast<int>(encoded.length());
|
| - int actual_size = 0;
|
| - if (offset_for_adjustment) {
|
| - if (*offset_for_adjustment >= encoded.length()) {
|
| - *offset_for_adjustment = string16::npos;
|
| - } else if (*offset_for_adjustment != 0) {
|
| - // Try to adjust the offset by converting the string in two pieces and
|
| - // using the length of the first piece as the adjusted offset.
|
| - actual_size += ucnv_toUChars(converter, byte_buffer, byte_buffer_length,
|
| - data, static_cast<int>(*offset_for_adjustment), &status);
|
| - if (U_SUCCESS(status)) {
|
| - // Conversion succeeded, so update the offset and then fall through to
|
| - // appending the second half of the string.
|
| - data += *offset_for_adjustment;
|
| - length -= *offset_for_adjustment;
|
| - *offset_for_adjustment = actual_size;
|
| - byte_buffer += actual_size;
|
| - byte_buffer_length -= actual_size;
|
| - } else {
|
| - // The offset may have been in the middle of an encoding sequence; mark
|
| - // it as having failed to adjust and then try to convert the entire
|
| - // string.
|
| - *offset_for_adjustment = string16::npos;
|
| - actual_size = 0;
|
| - ucnv_reset(converter);
|
| - status = U_ZERO_ERROR;
|
| - }
|
| - }
|
| - }
|
| - actual_size += ucnv_toUChars(converter, byte_buffer, byte_buffer_length, data,
|
| - length, &status);
|
| + int actual_size = ucnv_toUChars(converter, WriteInto(utf16, uchar_max_length),
|
| + static_cast<int>(uchar_max_length), encoded.data(),
|
| + static_cast<int>(encoded.length()), &status);
|
| ucnv_close(converter);
|
| if (!U_SUCCESS(status)) {
|
| utf16->clear(); // Make sure the output is empty on error.
|
| @@ -241,8 +207,6 @@
|
| return true;
|
| }
|
|
|
| -// Convert a wstring into the specified codepage_name. If the codepage
|
| -// isn't found, return false.
|
| bool WideToCodepage(const std::wstring& wide,
|
| const char* codepage_name,
|
| OnStringConversionError::Type on_error,
|
| @@ -272,16 +236,12 @@
|
| #endif // defined(WCHAR_T_IS_UTF32)
|
| }
|
|
|
| -// Converts a string of the given codepage into wstring.
|
| -// If the codepage isn't found, return false.
|
| -bool CodepageToWideAndAdjustOffset(const std::string& encoded,
|
| - const char* codepage_name,
|
| - OnStringConversionError::Type on_error,
|
| - std::wstring* wide,
|
| - size_t* offset_for_adjustment) {
|
| +bool CodepageToWide(const std::string& encoded,
|
| + const char* codepage_name,
|
| + OnStringConversionError::Type on_error,
|
| + std::wstring* wide) {
|
| #if defined(WCHAR_T_IS_UTF16)
|
| - return CodepageToUTF16AndAdjustOffset(encoded, codepage_name, on_error, wide,
|
| - offset_for_adjustment);
|
| + return CodepageToUTF16(encoded, codepage_name, on_error, wide);
|
| #elif defined(WCHAR_T_IS_UTF32)
|
| wide->clear();
|
|
|
| @@ -297,42 +257,10 @@
|
| size_t wchar_max_length = encoded.length() + 1;
|
|
|
| SetUpErrorHandlerForToUChars(on_error, converter, &status);
|
| - char* byte_buffer =
|
| - reinterpret_cast<char*>(WriteInto(wide, wchar_max_length));
|
| - int byte_buffer_length = static_cast<int>(wchar_max_length) * sizeof(wchar_t);
|
| - const char* data = encoded.data();
|
| - int length = static_cast<int>(encoded.length());
|
| - int actual_size = 0;
|
| - if (offset_for_adjustment) {
|
| - if (*offset_for_adjustment >= encoded.length()) {
|
| - *offset_for_adjustment = std::wstring::npos;
|
| - } else if (*offset_for_adjustment != 0) {
|
| - // Try to adjust the offset by converting the string in two pieces and
|
| - // using the length of the first piece as the adjusted offset.
|
| - actual_size += ucnv_toAlgorithmic(utf32_platform_endian(), converter,
|
| - byte_buffer, byte_buffer_length, data,
|
| - static_cast<int>(*offset_for_adjustment), &status);
|
| - if (U_SUCCESS(status)) {
|
| - // Conversion succeeded, so update the offset and then fall through to
|
| - // appending the second half of the string.
|
| - data += *offset_for_adjustment;
|
| - length -= *offset_for_adjustment;
|
| - *offset_for_adjustment = actual_size / sizeof(wchar_t);
|
| - byte_buffer += actual_size;
|
| - byte_buffer_length -= actual_size;
|
| - } else {
|
| - // The offset may have been in the middle of an encoding sequence; mark
|
| - // it as having failed to adjust and then try to convert the entire
|
| - // string.
|
| - *offset_for_adjustment = std::wstring::npos;
|
| - actual_size = 0;
|
| - ucnv_reset(converter);
|
| - status = U_ZERO_ERROR;
|
| - }
|
| - }
|
| - }
|
| - actual_size += ucnv_toAlgorithmic(utf32_platform_endian(), converter,
|
| - byte_buffer, byte_buffer_length, data, length, &status);
|
| + int actual_size = ucnv_toAlgorithmic(utf32_platform_endian(), converter,
|
| + reinterpret_cast<char*>(WriteInto(wide, wchar_max_length)),
|
| + static_cast<int>(wchar_max_length) * sizeof(wchar_t), encoded.data(),
|
| + static_cast<int>(encoded.length()), &status);
|
| ucnv_close(converter);
|
| if (!U_SUCCESS(status)) {
|
| wide->clear(); // Make sure the output is empty on error.
|
|
|