summaryrefslogtreecommitdiff
path: root/core/fxcrt/cfx_bytestring.cpp
diff options
context:
space:
mode:
authorDan Sinclair <dsinclair@chromium.org>2017-05-04 10:17:51 -0400
committerChromium commit bot <commit-bot@chromium.org>2017-05-04 17:56:25 +0000
commitc0aefd45c89a2980de8965f12bc80db408dfa78c (patch)
tree0dd4d480453dc7ae743b3b26c3fb06e412a69da2 /core/fxcrt/cfx_bytestring.cpp
parentb4a75830cc03dc6c44c4e0f3b5e31d05a0d8596a (diff)
downloadpdfium-c0aefd45c89a2980de8965f12bc80db408dfa78c.tar.xz
Cleanup CFX_CharMap
This CL removes the CFX_CharMap class and moves the two static methods into the files in which they're used. Change-Id: I8ff7cbfd7f1ef3970e39c77ffa3439099f7fec02 Reviewed-on: https://pdfium-review.googlesource.com/4873 Reviewed-by: dsinclair <dsinclair@chromium.org> Reviewed-by: Nicolás Peña <npm@chromium.org> Commit-Queue: dsinclair <dsinclair@chromium.org>
Diffstat (limited to 'core/fxcrt/cfx_bytestring.cpp')
-rw-r--r--core/fxcrt/cfx_bytestring.cpp36
1 files changed, 34 insertions, 2 deletions
diff --git a/core/fxcrt/cfx_bytestring.cpp b/core/fxcrt/cfx_bytestring.cpp
index 5c534507c6..f0dc370cc9 100644
--- a/core/fxcrt/cfx_bytestring.cpp
+++ b/core/fxcrt/cfx_bytestring.cpp
@@ -12,7 +12,7 @@
#include <cctype>
#include "core/fxcrt/cfx_string_pool_template.h"
-#include "core/fxcrt/fx_basic.h"
+#include "core/fxcrt/fx_codepage.h"
#include "core/fxcrt/fx_extension.h"
#include "core/fxcrt/fx_safe_types.h"
#include "third_party/base/numerics/safe_math.h"
@@ -82,6 +82,38 @@ const char* FX_strstr(const char* haystack,
return nullptr;
}
+#ifndef NDEBUG
+bool IsValidCodePage(uint16_t codepage) {
+ switch (codepage) {
+ case FX_CODEPAGE_DefANSI:
+ case FX_CODEPAGE_ShiftJIS:
+ case FX_CODEPAGE_ChineseSimplified:
+ case FX_CODEPAGE_Hangul:
+ case FX_CODEPAGE_ChineseTraditional:
+ return true;
+ default:
+ return false;
+ }
+}
+#endif
+
+CFX_ByteString GetByteString(uint16_t codepage, const CFX_WideStringC& wstr) {
+ ASSERT(IsValidCodePage(codepage));
+
+ int src_len = wstr.GetLength();
+ int dest_len = FXSYS_WideCharToMultiByte(codepage, 0, wstr.c_str(), src_len,
+ nullptr, 0, nullptr, nullptr);
+ if (!dest_len)
+ return CFX_ByteString();
+
+ CFX_ByteString bstr;
+ char* dest_buf = bstr.GetBuffer(dest_len);
+ FXSYS_WideCharToMultiByte(codepage, 0, wstr.c_str(), src_len, dest_buf,
+ dest_len, nullptr, nullptr);
+ bstr.ReleaseBuffer(dest_len);
+ return bstr;
+}
+
} // namespace
static_assert(sizeof(CFX_ByteString) <= sizeof(char*),
@@ -685,7 +717,7 @@ CFX_ByteString CFX_ByteString::FromUnicode(const wchar_t* str, FX_STRSIZE len) {
// static
CFX_ByteString CFX_ByteString::FromUnicode(const CFX_WideString& str) {
- return CFX_CharMap::GetByteString(0, str.AsStringC());
+ return GetByteString(0, str.AsStringC());
}
int CFX_ByteString::Compare(const CFX_ByteStringC& str) const {