summaryrefslogtreecommitdiff
path: root/xfa
diff options
context:
space:
mode:
Diffstat (limited to 'xfa')
-rw-r--r--xfa/fgas/font/cfgas_fontmgr.cpp23
-rw-r--r--xfa/fgas/font/cfgas_fontmgr.h4
2 files changed, 16 insertions, 11 deletions
diff --git a/xfa/fgas/font/cfgas_fontmgr.cpp b/xfa/fgas/font/cfgas_fontmgr.cpp
index 6215766666..7beba120fa 100644
--- a/xfa/fgas/font/cfgas_fontmgr.cpp
+++ b/xfa/fgas/font/cfgas_fontmgr.cpp
@@ -692,13 +692,16 @@ bool CFX_FontSourceEnum_File::HasStartPosition() {
return m_wsNext.GetLength() != 0;
}
-RetainPtr<CFX_CRTFileAccess> CFX_FontSourceEnum_File::GetNext() {
+// <next exists, stream for next>
+std::pair<bool, RetainPtr<IFX_SeekableStream>>
+CFX_FontSourceEnum_File::GetNext() {
if (m_wsNext.GetLength() == 0)
- return nullptr;
+ return {false, nullptr};
- auto pAccess = pdfium::MakeRetain<CFX_CRTFileAccess>(m_wsNext.AsStringView());
+ auto stream = IFX_SeekableStream::CreateFromFilename(m_wsNext.c_str(),
+ FX_FILEMODE_ReadOnly);
m_wsNext = GetNextFile().UTF8Decode();
- return pAccess;
+ return {true, stream};
}
CFGAS_FontMgr::CFGAS_FontMgr()
@@ -735,11 +738,13 @@ bool CFGAS_FontMgr::EnumFontsFromFiles() {
if (!m_pFontSource->HasStartPosition())
return !m_InstalledFonts.empty();
- while (RetainPtr<CFX_CRTFileAccess> pFontSource = m_pFontSource->GetNext()) {
- RetainPtr<IFX_SeekableReadStream> pFontStream =
- pFontSource->CreateFileStream(FX_FILEMODE_ReadOnly);
- if (pFontStream)
- RegisterFaces(pFontStream, nullptr);
+ bool has_next;
+ RetainPtr<IFX_SeekableStream> stream;
+ std::tie(has_next, stream) = m_pFontSource->GetNext();
+ while (has_next) {
+ if (stream)
+ RegisterFaces(stream, nullptr);
+ std::tie(has_next, stream) = m_pFontSource->GetNext();
}
return !m_InstalledFonts.empty();
}
diff --git a/xfa/fgas/font/cfgas_fontmgr.h b/xfa/fgas/font/cfgas_fontmgr.h
index f1e75bad95..351b5d624c 100644
--- a/xfa/fgas/font/cfgas_fontmgr.h
+++ b/xfa/fgas/font/cfgas_fontmgr.h
@@ -11,9 +11,9 @@
#include <map>
#include <memory>
#include <set>
+#include <utility>
#include <vector>
-#include "core/fxcrt/cfx_crtfileaccess.h"
#include "core/fxcrt/cfx_seekablestreamproxy.h"
#include "core/fxcrt/fx_extension.h"
#include "core/fxcrt/observable.h"
@@ -104,7 +104,7 @@ class CFX_FontSourceEnum_File {
~CFX_FontSourceEnum_File();
bool HasStartPosition();
- RetainPtr<CFX_CRTFileAccess> GetNext();
+ std::pair<bool, RetainPtr<IFX_SeekableStream>> GetNext();
private:
struct HandleParentPath {