diff options
author | tsepez <tsepez@chromium.org> | 2016-12-07 09:21:17 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-12-07 09:21:18 -0800 |
commit | 833619b4441915c7c55085d44b3221eaef0d9800 (patch) | |
tree | 68bf76e83078223ba03f490c2c13f484e40154d4 /core/fxge/ge/cfx_font.cpp | |
parent | 8f875507a986d10335e40a5f7c1679aff9770d0a (diff) | |
download | pdfium-833619b4441915c7c55085d44b3221eaef0d9800.tar.xz |
Refcount all the IFX_ stream classes all the time.
We can remove a lot of "bOwnsStream" logic in the process.
Always pass these by const reference, in case the called method
wants to hang on to the stream (one exception is where we stick
a raw pointer into a void* slot in a context from another layer).
Review-Url: https://codereview.chromium.org/2451493002
Diffstat (limited to 'core/fxge/ge/cfx_font.cpp')
-rw-r--r-- | core/fxge/ge/cfx_font.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/core/fxge/ge/cfx_font.cpp b/core/fxge/ge/cfx_font.cpp index b85709040b..7be300ff66 100644 --- a/core/fxge/ge/cfx_font.cpp +++ b/core/fxge/ge/cfx_font.cpp @@ -47,21 +47,27 @@ unsigned long FTStreamRead(FXFT_Stream stream, IFX_SeekableReadStream* pFile = static_cast<IFX_SeekableReadStream*>(stream->descriptor.pointer); - return pFile->ReadBlock(buffer, offset, count) ? count : 0; + if (!pFile) + return 0; + + if (!pFile->ReadBlock(buffer, offset, count)) + return 0; + + return count; } void FTStreamClose(FXFT_Stream stream) {} bool LoadFileImp(FXFT_Library library, FXFT_Face* Face, - IFX_SeekableReadStream* pFile, + const CFX_RetainPtr<IFX_SeekableReadStream>& pFile, int32_t faceIndex, std::unique_ptr<FXFT_StreamRec>* stream) { - std::unique_ptr<FXFT_StreamRec> stream1(new FXFT_StreamRec()); + auto stream1 = pdfium::MakeUnique<FXFT_StreamRec>(); stream1->base = nullptr; stream1->size = static_cast<unsigned long>(pFile->GetSize()); stream1->pos = 0; - stream1->descriptor.pointer = pFile; + stream1->descriptor.pointer = static_cast<void*>(pFile.Get()); stream1->close = FTStreamClose; stream1->read = FTStreamRead; FXFT_Open_Args args; @@ -338,15 +344,15 @@ void CFX_Font::LoadSubst(const CFX_ByteString& face_name, } #ifdef PDF_ENABLE_XFA -bool CFX_Font::LoadFile(IFX_SeekableReadStream* pFile, +bool CFX_Font::LoadFile(const CFX_RetainPtr<IFX_SeekableReadStream>& pFile, int nFaceIndex, int* pFaceCount) { m_bEmbedded = false; CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr(); pFontMgr->InitFTLibrary(); - FXFT_Library library = pFontMgr->GetFTLibrary(); + FXFT_Library library = pFontMgr->GetFTLibrary(); std::unique_ptr<FXFT_StreamRec> stream; if (!LoadFileImp(library, &m_Face, pFile, nFaceIndex, &stream)) return false; |