summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--BUILD.gn2
-rw-r--r--core/fpdfapi/edit/cpdf_creator.cpp13
-rw-r--r--core/fpdfapi/edit/cpdf_creator.h6
-rw-r--r--fpdfsdk/fpdfsave.cpp51
-rw-r--r--fpdfsdk/fsdk_filewriteadapter.cpp18
-rw-r--r--fpdfsdk/fsdk_filewriteadapter.h28
6 files changed, 62 insertions, 56 deletions
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<IFX_WriteStream>& 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<IFX_WriteStream>& 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<IFX_WriteStream>& pFile);
~CPDF_Creator();
void RemoveSecurity();
- bool Create(const CFX_RetainPtr<IFX_WriteStream>& 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 <ctime>
#endif
-class CFX_IFileWrite final : public IFX_WriteStream {
- public:
- static CFX_RetainPtr<CFX_IFileWrite> Create();
-
- bool Init(FPDF_FILEWRITE* pFileWriteStruct);
- bool WriteBlock(const void* pData, size_t size) override;
-
- protected:
- template <typename T, typename... Args>
- friend CFX_RetainPtr<T> pdfium::MakeRetain(Args&&... args);
-
- CFX_IFileWrite();
- ~CFX_IFileWrite() override {}
-
- FPDF_FILEWRITE* m_pFileWriteStruct;
-};
-
-CFX_RetainPtr<CFX_IFileWrite> CFX_IFileWrite::Create() {
- return pdfium::MakeRetain<CFX_IFileWrite>();
-}
-
-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<FSDK_FileWriteAdapter>(pFileWrite));
if (bSetVersion)
- FileMaker.SetFileVersion(fileVerion);
+ fileMaker.SetFileVersion(fileVerion);
if (flags == FPDF_REMOVE_SECURITY) {
flags = 0;
- FileMaker.RemoveSecurity();
+ fileMaker.RemoveSecurity();
}
- CFX_RetainPtr<CFX_IFileWrite> 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 <typename T, typename... Args>
+ friend CFX_RetainPtr<T> 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_