From bbdb02cfa685b283523ea2080f557dce516bd13b Mon Sep 17 00:00:00 2001 From: Krzysztof Kowalczyk Date: Thu, 23 May 2024 18:08:53 +0200 Subject: [PATCH] ChmFile::SmartToUtf8() => SmartToUtf8Temp() --- src/ChmFile.cpp | 30 ++++++++++++++---------------- src/ChmFile.h | 2 +- src/EngineEbook.cpp | 3 +-- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/ChmFile.cpp b/src/ChmFile.cpp index 5a8c64b486a..926bab5dc9e 100644 --- a/src/ChmFile.cpp +++ b/src/ChmFile.cpp @@ -71,17 +71,19 @@ ByteSlice ChmFile::GetData(const char* fileName) const { return {d, len}; } -char* ChmFile::SmartToUtf8(const char* s, uint overrideCP) const { +TempStr ChmFile::SmartToUtf8Temp(const char* s, uint overrideCP) const { if (str::StartsWith(s, UTF8_BOM)) { - return str::Dup(s + 3); + return str::DupTemp(s + 3); } if (overrideCP) { - return strconv::ToMultiByte(s, overrideCP, CP_UTF8); + char* s2 = strconv::ToMultiByte(s, overrideCP, CP_UTF8); + return str::DupTemp(s2); } if (CP_UTF8 == codepage) { - return str::Dup(s); + return str::DupTemp(s); } - return strconv::ToMultiByte(s, codepage, CP_UTF8); + char* s2 = strconv::ToMultiByte(s, codepage, CP_UTF8); + return s2; } WCHAR* ChmFile::SmartToWStr(const char* text) const { @@ -254,25 +256,23 @@ void ChmFile::FixPathCodepage(AutoFreeStr& path, uint& fileCP) { return; } - char* utf8Path = SmartToUtf8(path.Get()); + TempStr utf8Path = SmartToUtf8Temp(path.Get()); if (HasData(utf8Path)) { - path.Set(utf8Path); + path.SetCopy(utf8Path); fileCP = codepage; return; } - str::Free(utf8Path); if (fileCP == codepage) { return; } - utf8Path = SmartToUtf8(path.Get(), fileCP); + utf8Path = SmartToUtf8Temp(path.Get(), fileCP); if (HasData(utf8Path)) { - path.Set(utf8Path); + path.SetCopy(utf8Path); codepage = fileCP; return; } - str::Free(utf8Path); } bool ChmFile::Load(const char* path) { @@ -325,9 +325,9 @@ bool ChmFile::Load(const char* path) { TempStr ChmFile::GetPropertyTemp(const char* name) const { char* result = nullptr; if (str::Eq(kPropTitle, name) && title.CStr()) { - result = SmartToUtf8(title.CStr()); + result = SmartToUtf8Temp(title.CStr()); } else if (str::Eq(kPropCreatorApp, name) && creator.CStr()) { - result = SmartToUtf8(creator.CStr()); + result = SmartToUtf8Temp(creator.CStr()); } // TODO: shouldn't it be up to the front-end to normalize whitespace? if (!result) { @@ -335,9 +335,7 @@ TempStr ChmFile::GetPropertyTemp(const char* name) const { } // TODO: original code called str::RemoveCharsInPlace(result, "\n\r\t") str::NormalizeWSInPlace(result); - TempStr temp = str::DupTemp(result); - str::Free(result); - return temp; + return result; } const char* ChmFile::GetHomePath() const { diff --git a/src/ChmFile.h b/src/ChmFile.h index bcc59841b9b..ff8e00a5e01 100644 --- a/src/ChmFile.h +++ b/src/ChmFile.h @@ -27,7 +27,7 @@ struct ChmFile { ByteSlice GetData(const char* fileName) const; char* ResolveTopicID(unsigned int id) const; - char* SmartToUtf8(const char* text, uint overrideCP = 0) const; + TempStr SmartToUtf8Temp(const char* text, uint overrideCP = 0) const; WCHAR* SmartToWStr(const char* text) const; TempStr GetPropertyTemp(const char* name) const; diff --git a/src/EngineEbook.cpp b/src/EngineEbook.cpp index 0d87a2fd138..68164eb3167 100644 --- a/src/EngineEbook.cpp +++ b/src/EngineEbook.cpp @@ -1511,9 +1511,8 @@ class ChmHtmlCollector : public EbookTocVisitor { } html.AppendFmt("", plainUrl); uint charset = ExtractHttpCharset((const char*)pageHtml.Get(), pageHtml.size()); - char* s = doc->SmartToUtf8((const char*)pageHtml.Get(), charset); + TempStr s = doc->SmartToUtf8Temp((const char*)pageHtml.Get(), charset); html.Append(s); - str::Free(s); added.Append(plainUrl); pageHtml.Free(); }