Chromium Code Reviews| Index: content/child/dwrite_font_proxy/dwrite_localized_strings_win.cc |
| diff --git a/content/child/dwrite_font_proxy/dwrite_localized_strings_win.cc b/content/child/dwrite_font_proxy/dwrite_localized_strings_win.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..b29ef6dddaf6799bbe137b73cecd06a76aa72f1a |
| --- /dev/null |
| +++ b/content/child/dwrite_font_proxy/dwrite_localized_strings_win.cc |
| @@ -0,0 +1,76 @@ |
| +// Copyright 2015 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 "content/child/dwrite_font_proxy/dwrite_localized_strings_win.h" |
| + |
| +#include "base/logging.h" |
| + |
| +namespace content { |
| + |
| +DWriteLocalizedStrings::~DWriteLocalizedStrings() {} |
| + |
| +HRESULT DWriteLocalizedStrings::FindLocaleName(const WCHAR* locale_name, |
| + UINT32* index, |
| + BOOL* exists) { |
| + for (unsigned int n = 0; n < strings_.size(); ++n) { |
|
Alexei Svitkine (slow)
2015/11/25 20:17:45
Convention is to use size_t for std::vector indexe
Ilya Kulshin
2015/12/02 02:23:01
Done.
|
| + if (_wcsicmp(strings_[n].first.data(), locale_name) == 0) { |
| + *index = n; |
| + *exists = TRUE; |
| + return S_OK; |
| + } |
| + } |
| + |
| + *index = UINT_MAX; |
| + *exists = FALSE; |
| + return S_OK; |
| +} |
| + |
| +UINT32 DWriteLocalizedStrings::GetCount() { |
| + return strings_.size(); |
| +} |
| + |
| +HRESULT DWriteLocalizedStrings::GetLocaleName(UINT32 index, |
| + WCHAR* locale_name, |
| + UINT32 size) { |
| + if (index >= strings_.size()) |
| + return E_INVALIDARG; |
| + if (size <= strings_[index].first.size()) |
|
Alexei Svitkine (slow)
2015/11/25 20:17:45
If it's equal, shouldn't it be OK? Or is this to a
Ilya Kulshin
2015/12/02 02:23:01
Done.
|
| + return E_INVALIDARG; |
| + wcsncpy(locale_name, strings_[index].first.data(), size); |
|
Alexei Svitkine (slow)
2015/11/25 20:17:45
This isn't correct. You're copying |size| bytes, b
Ilya Kulshin
2015/12/02 02:23:01
wcsncpy will not overread the source (it will inst
|
| + return S_OK; |
| +} |
| + |
| +HRESULT DWriteLocalizedStrings::GetLocaleNameLength(UINT32 index, |
| + UINT32* length) { |
| + if (index >= strings_.size()) |
| + return E_INVALIDARG; |
| + *length = strings_[index].first.size(); |
| + return S_OK; |
| +} |
| + |
| +HRESULT DWriteLocalizedStrings::GetString(UINT32 index, |
| + WCHAR* string_buffer, |
| + UINT32 size) { |
| + if (index >= strings_.size()) |
| + return E_INVALIDARG; |
| + if (size <= strings_[index].second.size()) |
| + return E_INVALIDARG; |
| + wcsncpy(string_buffer, strings_[index].second.data(), size); |
| + return S_OK; |
| +} |
| + |
| +HRESULT DWriteLocalizedStrings::GetStringLength(UINT32 index, UINT32* length) { |
| + if (index >= strings_.size()) |
| + return E_INVALIDARG; |
| + *length = strings_[index].second.size(); |
| + return S_OK; |
| +} |
| + |
| +HRESULT DWriteLocalizedStrings::RuntimeClassInitialize( |
| + std::vector<std::pair<base::string16, base::string16>>* strings) { |
| + strings_.swap(*strings); |
| + return S_OK; |
| +} |
| + |
| +} // namespace content |