| Index: base/sys_string_conversions_linux.cc
 | 
| diff --git a/base/sys_string_conversions_linux.cc b/base/sys_string_conversions_linux.cc
 | 
| deleted file mode 100644
 | 
| index 2dc6b6f67e8ce3b00bc9140aa004dede2fd324d7..0000000000000000000000000000000000000000
 | 
| --- a/base/sys_string_conversions_linux.cc
 | 
| +++ /dev/null
 | 
| @@ -1,161 +0,0 @@
 | 
| -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
 | 
| -// Use of this source code is governed by a BSD-style license that can be
 | 
| -// found in the LICENSE file.
 | 
| -
 | 
| -#include "base/sys_string_conversions.h"
 | 
| -
 | 
| -#include <wchar.h>
 | 
| -
 | 
| -#include "base/string_piece.h"
 | 
| -#include "base/utf_string_conversions.h"
 | 
| -
 | 
| -namespace base {
 | 
| -
 | 
| -std::string SysWideToUTF8(const std::wstring& wide) {
 | 
| -  // In theory this should be using the system-provided conversion rather
 | 
| -  // than our ICU, but this will do for now.
 | 
| -  return WideToUTF8(wide);
 | 
| -}
 | 
| -std::wstring SysUTF8ToWide(const StringPiece& utf8) {
 | 
| -  // In theory this should be using the system-provided conversion rather
 | 
| -  // than our ICU, but this will do for now.
 | 
| -  std::wstring out;
 | 
| -  UTF8ToWide(utf8.data(), utf8.size(), &out);
 | 
| -  return out;
 | 
| -}
 | 
| -
 | 
| -#if defined(OS_CHROMEOS) || defined(OS_ANDROID)
 | 
| -// TODO(port): Consider reverting the OS_ANDROID when we have wcrtomb()
 | 
| -// support and a better understanding of what calls these routines.
 | 
| -
 | 
| -// ChromeOS always runs in UTF-8 locale.
 | 
| -std::string SysWideToNativeMB(const std::wstring& wide) {
 | 
| -  return WideToUTF8(wide);
 | 
| -}
 | 
| -
 | 
| -std::wstring SysNativeMBToWide(const StringPiece& native_mb) {
 | 
| -  return SysUTF8ToWide(native_mb);
 | 
| -}
 | 
| -
 | 
| -#else
 | 
| -
 | 
| -std::string SysWideToNativeMB(const std::wstring& wide) {
 | 
| -  mbstate_t ps;
 | 
| -
 | 
| -  // Calculate the number of multi-byte characters.  We walk through the string
 | 
| -  // without writing the output, counting the number of multi-byte characters.
 | 
| -  size_t num_out_chars = 0;
 | 
| -  memset(&ps, 0, sizeof(ps));
 | 
| -  for (size_t i = 0; i < wide.size(); ++i) {
 | 
| -    const wchar_t src = wide[i];
 | 
| -    // Use a temp buffer since calling wcrtomb with an output of NULL does not
 | 
| -    // calculate the output length.
 | 
| -    char buf[16];
 | 
| -    // Skip NULLs to avoid wcrtomb's special handling of them.
 | 
| -    size_t res = src ? wcrtomb(buf, src, &ps) : 0;
 | 
| -    switch (res) {
 | 
| -      // Handle any errors and return an empty string.
 | 
| -      case static_cast<size_t>(-1):
 | 
| -        return std::string();
 | 
| -        break;
 | 
| -      case 0:
 | 
| -        // We hit an embedded null byte, keep going.
 | 
| -        ++num_out_chars;
 | 
| -        break;
 | 
| -      default:
 | 
| -        num_out_chars += res;
 | 
| -        break;
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  if (num_out_chars == 0)
 | 
| -    return std::string();
 | 
| -
 | 
| -  std::string out;
 | 
| -  out.resize(num_out_chars);
 | 
| -
 | 
| -  // We walk the input string again, with |i| tracking the index of the
 | 
| -  // wide input, and |j| tracking the multi-byte output.
 | 
| -  memset(&ps, 0, sizeof(ps));
 | 
| -  for (size_t i = 0, j = 0; i < wide.size(); ++i) {
 | 
| -    const wchar_t src = wide[i];
 | 
| -    // We don't want wcrtomb to do it's funkiness for embedded NULLs.
 | 
| -    size_t res = src ? wcrtomb(&out[j], src, &ps) : 0;
 | 
| -    switch (res) {
 | 
| -      // Handle any errors and return an empty string.
 | 
| -      case static_cast<size_t>(-1):
 | 
| -        return std::string();
 | 
| -        break;
 | 
| -      case 0:
 | 
| -        // We hit an embedded null byte, keep going.
 | 
| -        ++j;  // Output is already zeroed.
 | 
| -        break;
 | 
| -      default:
 | 
| -        j += res;
 | 
| -        break;
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  return out;
 | 
| -}
 | 
| -
 | 
| -std::wstring SysNativeMBToWide(const StringPiece& native_mb) {
 | 
| -  mbstate_t ps;
 | 
| -
 | 
| -  // Calculate the number of wide characters.  We walk through the string
 | 
| -  // without writing the output, counting the number of wide characters.
 | 
| -  size_t num_out_chars = 0;
 | 
| -  memset(&ps, 0, sizeof(ps));
 | 
| -  for (size_t i = 0; i < native_mb.size(); ) {
 | 
| -    const char* src = native_mb.data() + i;
 | 
| -    size_t res = mbrtowc(NULL, src, native_mb.size() - i, &ps);
 | 
| -    switch (res) {
 | 
| -      // Handle any errors and return an empty string.
 | 
| -      case static_cast<size_t>(-2):
 | 
| -      case static_cast<size_t>(-1):
 | 
| -        return std::wstring();
 | 
| -        break;
 | 
| -      case 0:
 | 
| -        // We hit an embedded null byte, keep going.
 | 
| -        i += 1;  // Fall through.
 | 
| -      default:
 | 
| -        i += res;
 | 
| -        ++num_out_chars;
 | 
| -        break;
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  if (num_out_chars == 0)
 | 
| -    return std::wstring();
 | 
| -
 | 
| -  std::wstring out;
 | 
| -  out.resize(num_out_chars);
 | 
| -
 | 
| -  memset(&ps, 0, sizeof(ps));  // Clear the shift state.
 | 
| -  // We walk the input string again, with |i| tracking the index of the
 | 
| -  // multi-byte input, and |j| tracking the wide output.
 | 
| -  for (size_t i = 0, j = 0; i < native_mb.size(); ++j) {
 | 
| -    const char* src = native_mb.data() + i;
 | 
| -    wchar_t* dst = &out[j];
 | 
| -    size_t res = mbrtowc(dst, src, native_mb.size() - i, &ps);
 | 
| -    switch (res) {
 | 
| -      // Handle any errors and return an empty string.
 | 
| -      case static_cast<size_t>(-2):
 | 
| -      case static_cast<size_t>(-1):
 | 
| -        return std::wstring();
 | 
| -        break;
 | 
| -      case 0:
 | 
| -        i += 1;  // Skip null byte.
 | 
| -        break;
 | 
| -      default:
 | 
| -        i += res;
 | 
| -        break;
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  return out;
 | 
| -}
 | 
| -
 | 
| -#endif  // OS_CHROMEOS
 | 
| -
 | 
| -}  // namespace base
 | 
| 
 |