summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authortsepez <tsepez@chromium.org>2016-04-08 09:00:35 -0700
committerCommit bot <commit-bot@chromium.org>2016-04-08 09:00:35 -0700
commit8b36e5cc3d5f5f579c6b060e2c40b896a4b02bc0 (patch)
treef84a20d330d92b791d0322f424cb155816d77d1b /core
parent8da140e8747920057a2f2bbcf5c78e40bb198733 (diff)
downloadpdfium-8b36e5cc3d5f5f579c6b060e2c40b896a4b02bc0.tar.xz
Make CFX_WideString::FromLocal() take a CFX_ByteStringC arg
It doesn't persist the string beyond the duration of the call, hence it should take the *StringC variant. Doing so avoids some allocs by changing to the *StringC ctor in a few places, at the cost of some explicit .ToByteStringC() calls (which are cheap). Review URL: https://codereview.chromium.org/1862953004
Diffstat (limited to 'core')
-rw-r--r--core/fpdfdoc/doc_action.cpp3
-rw-r--r--core/fpdfdoc/doc_basic.cpp14
-rw-r--r--core/fpdfdoc/doc_form.cpp5
-rw-r--r--core/fxcrt/fx_basic_bstring.cpp2
-rw-r--r--core/fxcrt/fx_basic_wstring.cpp13
-rw-r--r--core/fxcrt/fx_extension.cpp2
-rw-r--r--core/fxcrt/include/fx_basic.h4
-rw-r--r--core/fxcrt/include/fx_string.h4
8 files changed, 27 insertions, 20 deletions
diff --git a/core/fpdfdoc/doc_action.cpp b/core/fpdfdoc/doc_action.cpp
index c3ab552606..075849482c 100644
--- a/core/fpdfdoc/doc_action.cpp
+++ b/core/fpdfdoc/doc_action.cpp
@@ -73,7 +73,8 @@ CFX_WideString CPDF_Action::GetFilePath() const {
if (type == "Launch") {
CPDF_Dictionary* pWinDict = m_pDict->GetDictBy("Win");
if (pWinDict) {
- return CFX_WideString::FromLocal(pWinDict->GetStringBy("F"));
+ return CFX_WideString::FromLocal(
+ pWinDict->GetStringBy("F").AsByteStringC());
}
}
return path;
diff --git a/core/fpdfdoc/doc_basic.cpp b/core/fpdfdoc/doc_basic.cpp
index 9318387f7f..308bf04287 100644
--- a/core/fpdfdoc/doc_basic.cpp
+++ b/core/fpdfdoc/doc_basic.cpp
@@ -315,23 +315,27 @@ bool CPDF_FileSpec::GetFileName(CFX_WideString* csFileName) const {
if (CPDF_Dictionary* pDict = m_pObj->AsDictionary()) {
*csFileName = pDict->GetUnicodeTextBy("UF");
if (csFileName->IsEmpty()) {
- *csFileName = CFX_WideString::FromLocal(pDict->GetStringBy("F"));
+ *csFileName = CFX_WideString::FromLocal(pDict->GetConstStringBy("F"));
}
if (pDict->GetStringBy("FS") == "URL")
return true;
if (csFileName->IsEmpty()) {
if (pDict->KeyExist("DOS")) {
- *csFileName = CFX_WideString::FromLocal(pDict->GetStringBy("DOS"));
+ *csFileName = CFX_WideString::FromLocal(
+ pDict->GetStringBy("DOS").AsByteStringC());
} else if (pDict->KeyExist("Mac")) {
- *csFileName = CFX_WideString::FromLocal(pDict->GetStringBy("Mac"));
+ *csFileName = CFX_WideString::FromLocal(
+ pDict->GetStringBy("Mac").AsByteStringC());
} else if (pDict->KeyExist("Unix")) {
- *csFileName = CFX_WideString::FromLocal(pDict->GetStringBy("Unix"));
+ *csFileName = CFX_WideString::FromLocal(
+ pDict->GetStringBy("Unix").AsByteStringC());
} else {
return false;
}
}
} else if (m_pObj->IsString()) {
- *csFileName = CFX_WideString::FromLocal(m_pObj->GetString());
+ *csFileName =
+ CFX_WideString::FromLocal(m_pObj->GetString().AsByteStringC());
} else {
return false;
}
diff --git a/core/fpdfdoc/doc_form.cpp b/core/fpdfdoc/doc_form.cpp
index 80c09714a2..384bcaa435 100644
--- a/core/fpdfdoc/doc_form.cpp
+++ b/core/fpdfdoc/doc_form.cpp
@@ -35,12 +35,13 @@ CFX_WideString FPDFDOC_FDF_GetFieldValue(const CPDF_Dictionary& pFieldDict,
const CFX_ByteString csBValue = pFieldDict.GetStringBy("V");
for (const auto& encoding : g_fieldEncoding) {
if (bsEncoding == encoding.m_name)
- return CFX_WideString::FromCodePage(csBValue, encoding.m_codePage);
+ return CFX_WideString::FromCodePage(csBValue.AsByteStringC(),
+ encoding.m_codePage);
}
CFX_ByteString csTemp = csBValue.Left(2);
if (csTemp == "\xFF\xFE" || csTemp == "\xFE\xFF")
return PDF_DecodeText(csBValue);
- return CFX_WideString::FromLocal(csBValue);
+ return CFX_WideString::FromLocal(csBValue.AsByteStringC());
}
} // namespace
diff --git a/core/fxcrt/fx_basic_bstring.cpp b/core/fxcrt/fx_basic_bstring.cpp
index 2c2264a419..cc0dfe2341 100644
--- a/core/fxcrt/fx_basic_bstring.cpp
+++ b/core/fxcrt/fx_basic_bstring.cpp
@@ -824,7 +824,7 @@ CFX_ByteString CFX_ByteString::FromUnicode(const FX_WCHAR* str,
// static
CFX_ByteString CFX_ByteString::FromUnicode(const CFX_WideString& str) {
- return CFX_CharMap::GetByteString(0, str);
+ return CFX_CharMap::GetByteString(0, str.AsWideStringC());
}
int CFX_ByteString::Compare(const CFX_ByteStringC& str) const {
diff --git a/core/fxcrt/fx_basic_wstring.cpp b/core/fxcrt/fx_basic_wstring.cpp
index e2e122be9a..b5ccaf6da5 100644
--- a/core/fxcrt/fx_basic_wstring.cpp
+++ b/core/fxcrt/fx_basic_wstring.cpp
@@ -747,12 +747,12 @@ void CFX_WideString::SetAt(FX_STRSIZE nIndex, FX_WCHAR ch) {
}
// static
-CFX_WideString CFX_WideString::FromLocal(const CFX_ByteString& str) {
+CFX_WideString CFX_WideString::FromLocal(const CFX_ByteStringC& str) {
return FromCodePage(str, 0);
}
// static
-CFX_WideString CFX_WideString::FromCodePage(const CFX_ByteString& str,
+CFX_WideString CFX_WideString::FromCodePage(const CFX_ByteStringC& str,
uint16_t codepage) {
return CFX_CharMap::GetWideString(codepage, str);
}
@@ -943,7 +943,7 @@ FX_FLOAT CFX_WideString::GetFloat() const {
// static
CFX_ByteString CFX_CharMap::GetByteString(uint16_t codepage,
- const CFX_WideString& wstr) {
+ const CFX_WideStringC& wstr) {
FXSYS_assert(IsValidCodePage(codepage));
int src_len = wstr.GetLength();
int dest_len = FXSYS_WideCharToMultiByte(codepage, 0, wstr.c_str(), src_len,
@@ -960,15 +960,16 @@ CFX_ByteString CFX_CharMap::GetByteString(uint16_t codepage,
// static
CFX_WideString CFX_CharMap::GetWideString(uint16_t codepage,
- const CFX_ByteString& bstr) {
+ const CFX_ByteStringC& bstr) {
FXSYS_assert(IsValidCodePage(codepage));
int src_len = bstr.GetLength();
int dest_len =
- FXSYS_MultiByteToWideChar(codepage, 0, bstr, src_len, nullptr, 0);
+ FXSYS_MultiByteToWideChar(codepage, 0, bstr.c_str(), src_len, nullptr, 0);
CFX_WideString wstr;
if (dest_len) {
FX_WCHAR* dest_buf = wstr.GetBuffer(dest_len);
- FXSYS_MultiByteToWideChar(codepage, 0, bstr, src_len, dest_buf, dest_len);
+ FXSYS_MultiByteToWideChar(codepage, 0, bstr.c_str(), src_len, dest_buf,
+ dest_len);
wstr.ReleaseBuffer(dest_len);
}
return wstr;
diff --git a/core/fxcrt/fx_extension.cpp b/core/fxcrt/fx_extension.cpp
index 7e8029baba..f1fd980120 100644
--- a/core/fxcrt/fx_extension.cpp
+++ b/core/fxcrt/fx_extension.cpp
@@ -134,7 +134,7 @@ FX_FLOAT FXSYS_strtof(const FX_CHAR* pcsStr,
iLength = (int32_t)FXSYS_strlen(pcsStr);
}
CFX_WideString ws =
- CFX_WideString::FromLocal(CFX_ByteString(pcsStr, iLength));
+ CFX_WideString::FromLocal(CFX_ByteStringC(pcsStr, iLength));
return FXSYS_wcstof(ws.c_str(), iLength, pUsedLen);
}
FX_FLOAT FXSYS_wcstof(const FX_WCHAR* pwsStr,
diff --git a/core/fxcrt/include/fx_basic.h b/core/fxcrt/include/fx_basic.h
index 744b2dd10f..1cb5174351 100644
--- a/core/fxcrt/include/fx_basic.h
+++ b/core/fxcrt/include/fx_basic.h
@@ -186,10 +186,10 @@ class CFX_FileBufferArchive {
class CFX_CharMap {
public:
static CFX_ByteString GetByteString(uint16_t codepage,
- const CFX_WideString& wstr);
+ const CFX_WideStringC& wstr);
static CFX_WideString GetWideString(uint16_t codepage,
- const CFX_ByteString& bstr);
+ const CFX_ByteStringC& bstr);
CFX_CharMap() = delete;
};
diff --git a/core/fxcrt/include/fx_string.h b/core/fxcrt/include/fx_string.h
index 382e141dc2..8a0b3ff3db 100644
--- a/core/fxcrt/include/fx_string.h
+++ b/core/fxcrt/include/fx_string.h
@@ -497,8 +497,8 @@ class CFX_WideString {
~CFX_WideString();
- static CFX_WideString FromLocal(const CFX_ByteString& str);
- static CFX_WideString FromCodePage(const CFX_ByteString& str,
+ static CFX_WideString FromLocal(const CFX_ByteStringC& str);
+ static CFX_WideString FromCodePage(const CFX_ByteStringC& str,
uint16_t codepage);
static CFX_WideString FromUTF8(const CFX_ByteStringC& str);