From ae4656edebaea24d18d11a845c663240bf8e9d2d Mon Sep 17 00:00:00 2001 From: Dan Sinclair Date: Tue, 9 May 2017 12:36:41 -0400 Subject: Move FPDF_FILEWRITE adapter to own file This Cl moves the adapater out of the fpdfsave.cpp file into its own h/cpp files. The adapter was renamed for clarity. The CPDF_Creator was modified to take the adapter as a constructor param and the Create methods consolidated. Change-Id: Icb104f195ef532dda053c859aae356a8d4a7a54c Reviewed-on: https://pdfium-review.googlesource.com/5151 Reviewed-by: Tom Sepez Commit-Queue: dsinclair --- BUILD.gn | 2 ++ core/fpdfapi/edit/cpdf_creator.cpp | 13 ++++------ core/fpdfapi/edit/cpdf_creator.h | 6 ++--- fpdfsdk/fpdfsave.cpp | 51 +++++--------------------------------- fpdfsdk/fsdk_filewriteadapter.cpp | 18 ++++++++++++++ fpdfsdk/fsdk_filewriteadapter.h | 28 +++++++++++++++++++++ 6 files changed, 62 insertions(+), 56 deletions(-) create mode 100644 fpdfsdk/fsdk_filewriteadapter.cpp create mode 100644 fpdfsdk/fsdk_filewriteadapter.h diff --git a/BUILD.gn b/BUILD.gn index a1e487f501..680416c05a 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -146,6 +146,8 @@ static_library("pdfium") { "fpdfsdk/fpdfview.cpp", "fpdfsdk/fsdk_actionhandler.cpp", "fpdfsdk/fsdk_actionhandler.h", + "fpdfsdk/fsdk_filewriteadapter.cpp", + "fpdfsdk/fsdk_filewriteadapter.h", "fpdfsdk/fsdk_pauseadapter.cpp", "fpdfsdk/fsdk_pauseadapter.h", "fpdfsdk/pdfsdk_fieldaction.cpp", diff --git a/core/fpdfapi/edit/cpdf_creator.cpp b/core/fpdfapi/edit/cpdf_creator.cpp index 32dd28456e..d3cf5b85b7 100644 --- a/core/fpdfapi/edit/cpdf_creator.cpp +++ b/core/fpdfapi/edit/cpdf_creator.cpp @@ -56,7 +56,8 @@ int32_t OutputIndex(CFX_FileBufferArchive* pFile, FX_FILESIZE offset) { } // namespace -CPDF_Creator::CPDF_Creator(CPDF_Document* pDoc) +CPDF_Creator::CPDF_Creator(CPDF_Document* pDoc, + const CFX_RetainPtr& pFile) : m_pDocument(pDoc), m_pParser(pDoc->GetParser()), m_bSecurityChanged(false), @@ -73,7 +74,9 @@ CPDF_Creator::CPDF_Creator(CPDF_Document* pDoc) m_CurObjNum(0), m_XrefStart(0), m_pIDArray(nullptr), - m_FileVersion(0) {} + m_FileVersion(0) { + m_File.AttachFile(pFile); +} CPDF_Creator::~CPDF_Creator() { Clear(); @@ -911,12 +914,6 @@ void CPDF_Creator::Clear() { m_pIDArray.reset(); } -bool CPDF_Creator::Create(const CFX_RetainPtr& pFile, - uint32_t flags) { - m_File.AttachFile(pFile); - return Create(flags); -} - bool CPDF_Creator::Create(uint32_t flags) { m_dwFlags = flags; m_iStage = 0; diff --git a/core/fpdfapi/edit/cpdf_creator.h b/core/fpdfapi/edit/cpdf_creator.h index 9a15021c25..e263c6cc1d 100644 --- a/core/fpdfapi/edit/cpdf_creator.h +++ b/core/fpdfapi/edit/cpdf_creator.h @@ -29,11 +29,12 @@ class CPDF_XRefStream; class CPDF_Creator { public: - explicit CPDF_Creator(CPDF_Document* pDoc); + explicit CPDF_Creator(CPDF_Document* pDoc, + const CFX_RetainPtr& pFile); ~CPDF_Creator(); void RemoveSecurity(); - bool Create(const CFX_RetainPtr& pFile, uint32_t flags = 0); + bool Create(uint32_t flags = 0); int32_t Continue(); bool SetFileVersion(int32_t fileVersion = 17); @@ -60,7 +61,6 @@ class CPDF_Creator { bool IsIncremental() const { return !!(m_dwFlags & FPDFCREATE_INCREMENTAL); } private: - bool Create(uint32_t flags); void Clear(); void InitOldObjNumOffsets(); diff --git a/fpdfsdk/fpdfsave.cpp b/fpdfsdk/fpdfsave.cpp index 638c22be26..b0e0ec7cc3 100644 --- a/fpdfsdk/fpdfsave.cpp +++ b/fpdfsdk/fpdfsave.cpp @@ -19,6 +19,7 @@ #include "core/fxcrt/cfx_memorystream.h" #include "core/fxcrt/fx_extension.h" #include "fpdfsdk/fsdk_define.h" +#include "fpdfsdk/fsdk_filewriteadapter.h" #include "public/fpdf_edit.h" #ifdef PDF_ENABLE_XFA @@ -39,45 +40,6 @@ #include #endif -class CFX_IFileWrite final : public IFX_WriteStream { - public: - static CFX_RetainPtr Create(); - - bool Init(FPDF_FILEWRITE* pFileWriteStruct); - bool WriteBlock(const void* pData, size_t size) override; - - protected: - template - friend CFX_RetainPtr pdfium::MakeRetain(Args&&... args); - - CFX_IFileWrite(); - ~CFX_IFileWrite() override {} - - FPDF_FILEWRITE* m_pFileWriteStruct; -}; - -CFX_RetainPtr CFX_IFileWrite::Create() { - return pdfium::MakeRetain(); -} - -CFX_IFileWrite::CFX_IFileWrite() : m_pFileWriteStruct(nullptr) {} - -bool CFX_IFileWrite::Init(FPDF_FILEWRITE* pFileWriteStruct) { - if (!pFileWriteStruct) - return false; - - m_pFileWriteStruct = pFileWriteStruct; - return true; -} - -bool CFX_IFileWrite::WriteBlock(const void* pData, size_t size) { - if (!m_pFileWriteStruct) - return false; - - m_pFileWriteStruct->WriteBlock(m_pFileWriteStruct, pData, size); - return true; -} - namespace { #ifdef PDF_ENABLE_XFA @@ -294,17 +256,16 @@ bool FPDF_Doc_Save(FPDF_DOCUMENT document, if (flags < FPDF_INCREMENTAL || flags > FPDF_REMOVE_SECURITY) flags = 0; - CPDF_Creator FileMaker(pPDFDoc); + CPDF_Creator fileMaker(pPDFDoc, + pdfium::MakeRetain(pFileWrite)); if (bSetVersion) - FileMaker.SetFileVersion(fileVerion); + fileMaker.SetFileVersion(fileVerion); if (flags == FPDF_REMOVE_SECURITY) { flags = 0; - FileMaker.RemoveSecurity(); + fileMaker.RemoveSecurity(); } - CFX_RetainPtr pStreamWrite = CFX_IFileWrite::Create(); - pStreamWrite->Init(pFileWrite); - bool bRet = FileMaker.Create(pStreamWrite, flags); + bool bRet = fileMaker.Create(flags); #ifdef PDF_ENABLE_XFA SendPostSaveToXFADoc(pContext); #endif // PDF_ENABLE_XFA diff --git a/fpdfsdk/fsdk_filewriteadapter.cpp b/fpdfsdk/fsdk_filewriteadapter.cpp new file mode 100644 index 0000000000..98ca3af574 --- /dev/null +++ b/fpdfsdk/fsdk_filewriteadapter.cpp @@ -0,0 +1,18 @@ +// Copyright 2017 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#include "fpdfsdk/fsdk_filewriteadapter.h" + +FSDK_FileWriteAdapter::FSDK_FileWriteAdapter(FPDF_FILEWRITE* fileWriteStruct) + : fileWriteStruct_(fileWriteStruct) { + ASSERT(fileWriteStruct_); +} + +FSDK_FileWriteAdapter::~FSDK_FileWriteAdapter() {} + +bool FSDK_FileWriteAdapter::WriteBlock(const void* data, size_t size) { + return fileWriteStruct_->WriteBlock(fileWriteStruct_, data, size) != 0; +} diff --git a/fpdfsdk/fsdk_filewriteadapter.h b/fpdfsdk/fsdk_filewriteadapter.h new file mode 100644 index 0000000000..78f34cc679 --- /dev/null +++ b/fpdfsdk/fsdk_filewriteadapter.h @@ -0,0 +1,28 @@ +// Copyright 2017 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#ifndef FPDFSDK_FSDK_FILEWRITEADAPTER_H_ +#define FPDFSDK_FSDK_FILEWRITEADAPTER_H_ + +#include "core/fxcrt/cfx_retain_ptr.h" +#include "core/fxcrt/fx_stream.h" +#include "public/fpdf_save.h" + +class FSDK_FileWriteAdapter : public IFX_WriteStream { + public: + template + friend CFX_RetainPtr pdfium::MakeRetain(Args&&... args); + + bool WriteBlock(const void* data, size_t size) override; + + private: + explicit FSDK_FileWriteAdapter(FPDF_FILEWRITE* fileWriteStruct); + ~FSDK_FileWriteAdapter() override; + + FPDF_FILEWRITE* fileWriteStruct_; +}; + +#endif // FPDFSDK_FSDK_FILEWRITEADAPTER_H_ -- cgit v1.2.3