From 4b8b42be6cca9a5aa1103472de2c9da880e2512a Mon Sep 17 00:00:00 2001 From: Scott Graham Date: Fri, 23 Oct 2015 13:38:46 -0700 Subject: [PATCH] win: Implement c16lcpy without base:c16* Chromium base doesn't have base::c16len, c16memcpy, etc. when WCHAR_T_IS_UTF16, so implement c16lcpy without using those. R=mark@chromium.org BUG=crashpad:1, chromium:546288 Review URL: https://codereview.chromium.org/1417403004 . --- util/stdlib/strlcpy.cc | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/util/stdlib/strlcpy.cc b/util/stdlib/strlcpy.cc index 90d6d96e..be0dfb27 100644 --- a/util/stdlib/strlcpy.cc +++ b/util/stdlib/strlcpy.cc @@ -14,8 +14,27 @@ #include "util/stdlib/strlcpy.h" +#include "base/logging.h" +#include "build/build_config.h" + +#if defined(OS_WIN) && defined(WCHAR_T_IS_UTF16) +#include +#endif + namespace crashpad { +#if defined(OS_WIN) && defined(WCHAR_T_IS_UTF16) + +size_t c16lcpy(base::char16* destination, + const base::char16* source, + size_t length) { + HRESULT result = StringCchCopyW(destination, length, source); + CHECK(result == S_OK || result == STRSAFE_E_INSUFFICIENT_BUFFER); + return wcslen(source); +} + +#elif defined(WCHAR_T_IS_UTF32) + size_t c16lcpy(base::char16* destination, const base::char16* source, size_t length) { @@ -29,4 +48,6 @@ size_t c16lcpy(base::char16* destination, return source_length; } +#endif // WCHAR_T_IS_UTF32 + } // namespace crashpad