From bea049784abf7c32d0b9758fc77d0e601d5c232b Mon Sep 17 00:00:00 2001 From: tsepez Date: Thu, 1 Dec 2016 13:54:42 -0800 Subject: Make more concrete stream classes private to .cpp files Review-Url: https://codereview.chromium.org/2545653003 --- fpdfsdk/fpdfview.cpp | 68 +++++++++++++++++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 25 deletions(-) (limited to 'fpdfsdk/fpdfview.cpp') diff --git a/fpdfsdk/fpdfview.cpp b/fpdfsdk/fpdfview.cpp index 633cbe879e..449433ed90 100644 --- a/fpdfsdk/fpdfview.cpp +++ b/fpdfsdk/fpdfview.cpp @@ -117,6 +117,47 @@ void RenderPageImpl(CPDF_PageRenderContext* pContext, pContext->m_pDevice->RestoreState(false); } +class CPDF_CustomAccess final : public IFX_SeekableReadStream { + public: + explicit CPDF_CustomAccess(FPDF_FILEACCESS* pFileAccess); + ~CPDF_CustomAccess() override {} + + // IFX_SeekableReadStream + FX_FILESIZE GetSize() override; + void Release() override; + bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override; + + private: + FPDF_FILEACCESS m_FileAccess; +}; + +CPDF_CustomAccess::CPDF_CustomAccess(FPDF_FILEACCESS* pFileAccess) + : m_FileAccess(*pFileAccess) {} + +FX_FILESIZE CPDF_CustomAccess::GetSize() { + return m_FileAccess.m_FileLen; +} + +void CPDF_CustomAccess::Release() { + delete this; +} + +bool CPDF_CustomAccess::ReadBlock(void* buffer, + FX_FILESIZE offset, + size_t size) { + if (offset < 0) + return false; + + FX_SAFE_FILESIZE newPos = pdfium::base::checked_cast(size); + newPos += offset; + if (!newPos.IsValid() || + newPos.ValueOrDie() > static_cast(m_FileAccess.m_FileLen)) { + return false; + } + return !!m_FileAccess.m_GetBlock(m_FileAccess.m_Param, offset, + reinterpret_cast(buffer), size); +} + } // namespace UnderlyingDocumentType* UnderlyingFromFPDFDocument(FPDF_DOCUMENT doc) { @@ -246,31 +287,8 @@ bool CFPDF_FileStream::Flush() { } #endif // PDF_ENABLE_XFA -CPDF_CustomAccess::CPDF_CustomAccess(FPDF_FILEACCESS* pFileAccess) - : m_FileAccess(*pFileAccess) {} - -FX_FILESIZE CPDF_CustomAccess::GetSize() { - return m_FileAccess.m_FileLen; -} - -void CPDF_CustomAccess::Release() { - delete this; -} - -bool CPDF_CustomAccess::ReadBlock(void* buffer, - FX_FILESIZE offset, - size_t size) { - if (offset < 0) - return false; - - FX_SAFE_FILESIZE newPos = pdfium::base::checked_cast(size); - newPos += offset; - if (!newPos.IsValid() || - newPos.ValueOrDie() > static_cast(m_FileAccess.m_FileLen)) { - return false; - } - return !!m_FileAccess.m_GetBlock(m_FileAccess.m_Param, offset, - reinterpret_cast(buffer), size); +IFX_SeekableReadStream* MakeSeekableReadStream(FPDF_FILEACCESS* pFileAccess) { + return new CPDF_CustomAccess(pFileAccess); } // 0 bit: FPDF_POLICY_MACHINETIME_ACCESS -- cgit v1.2.3