Clean: Fix some unneeded semi-colons and bad spacing.
[pdfium.git] / fpdfsdk / src / fpdf_dataavail.cpp
1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #include "../../public/fpdf_dataavail.h"
8 #include "../include/fsdk_define.h"
9
10 extern void ProcessParseError(FX_DWORD err_code);
11 class CFPDF_FileAvailWrap : public IFX_FileAvail {
12  public:
13   CFPDF_FileAvailWrap() { m_pfileAvail = NULL; }
14   ~CFPDF_FileAvailWrap() override {}
15
16   void Set(FX_FILEAVAIL* pfileAvail) { m_pfileAvail = pfileAvail; }
17
18   // IFX_FileAvail
19   FX_BOOL IsDataAvail(FX_FILESIZE offset, FX_DWORD size) override {
20     return m_pfileAvail->IsDataAvail(m_pfileAvail, offset, size);
21   }
22
23  private:
24   FX_FILEAVAIL* m_pfileAvail;
25 };
26
27 class CFPDF_FileAccessWrap : public IFX_FileRead {
28  public:
29   CFPDF_FileAccessWrap() { m_pFileAccess = NULL; }
30   ~CFPDF_FileAccessWrap() override {}
31
32   void Set(FPDF_FILEACCESS* pFile) { m_pFileAccess = pFile; }
33
34   // IFX_FileRead
35   FX_FILESIZE GetSize() override { return m_pFileAccess->m_FileLen; }
36
37   FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override {
38     return m_pFileAccess->m_GetBlock(m_pFileAccess->m_Param, offset,
39                                      (uint8_t*)buffer, size);
40   }
41
42   void Release() override {}
43
44  private:
45   FPDF_FILEACCESS* m_pFileAccess;
46 };
47
48 class CFPDF_DownloadHintsWrap : public IFX_DownloadHints {
49  public:
50   explicit CFPDF_DownloadHintsWrap(FX_DOWNLOADHINTS* pDownloadHints) {
51     m_pDownloadHints = pDownloadHints;
52   }
53   ~CFPDF_DownloadHintsWrap() override {}
54
55  public:
56   // IFX_DownloadHints
57   void AddSegment(FX_FILESIZE offset, FX_DWORD size) override {
58     m_pDownloadHints->AddSegment(m_pDownloadHints, offset, size);
59   }
60
61  private:
62   FX_DOWNLOADHINTS* m_pDownloadHints;
63 };
64
65 class CFPDF_DataAvail {
66  public:
67   CFPDF_DataAvail() { m_pDataAvail = NULL; }
68
69   ~CFPDF_DataAvail() { delete m_pDataAvail; }
70
71   IPDF_DataAvail* m_pDataAvail;
72   CFPDF_FileAvailWrap m_FileAvail;
73   CFPDF_FileAccessWrap m_FileRead;
74 };
75
76 DLLEXPORT FPDF_AVAIL STDCALL FPDFAvail_Create(FX_FILEAVAIL* file_avail,
77                                               FPDF_FILEACCESS* file) {
78   CFPDF_DataAvail* pAvail = new CFPDF_DataAvail;
79   pAvail->m_FileAvail.Set(file_avail);
80   pAvail->m_FileRead.Set(file);
81   pAvail->m_pDataAvail =
82       IPDF_DataAvail::Create(&pAvail->m_FileAvail, &pAvail->m_FileRead);
83   return pAvail;
84 }
85
86 DLLEXPORT void STDCALL FPDFAvail_Destroy(FPDF_AVAIL avail) {
87   delete (CFPDF_DataAvail*)avail;
88 }
89
90 DLLEXPORT int STDCALL FPDFAvail_IsDocAvail(FPDF_AVAIL avail,
91                                            FX_DOWNLOADHINTS* hints) {
92   if (avail == NULL || hints == NULL)
93     return 0;
94   CFPDF_DownloadHintsWrap hints_wrap(hints);
95   return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsDocAvail(&hints_wrap);
96 }
97
98 extern void CheckUnSupportError(CPDF_Document* pDoc, FX_DWORD err_code);
99
100 DLLEXPORT FPDF_DOCUMENT STDCALL
101 FPDFAvail_GetDocument(FPDF_AVAIL avail, FPDF_BYTESTRING password) {
102   if (avail == NULL)
103     return NULL;
104   CPDF_Parser* pParser = new CPDF_Parser;
105   pParser->SetPassword(password);
106
107   FX_DWORD err_code = pParser->StartAsynParse(
108       ((CFPDF_DataAvail*)avail)->m_pDataAvail->GetFileRead());
109   if (err_code) {
110     delete pParser;
111     ProcessParseError(err_code);
112     return NULL;
113   }
114   ((CFPDF_DataAvail*)avail)->m_pDataAvail->SetDocument(pParser->GetDocument());
115   CheckUnSupportError(pParser->GetDocument(), FPDF_ERR_SUCCESS);
116   return pParser->GetDocument();
117 }
118
119 DLLEXPORT int STDCALL FPDFAvail_GetFirstPageNum(FPDF_DOCUMENT doc) {
120   if (doc == NULL)
121     return 0;
122   CPDF_Document* pDoc = (CPDF_Document*)doc;
123   return ((CPDF_Parser*)pDoc->GetParser())->GetFirstPageNo();
124 }
125
126 DLLEXPORT int STDCALL FPDFAvail_IsPageAvail(FPDF_AVAIL avail,
127                                             int page_index,
128                                             FX_DOWNLOADHINTS* hints) {
129   if (avail == NULL || hints == NULL)
130     return 0;
131   CFPDF_DownloadHintsWrap hints_wrap(hints);
132   return ((CFPDF_DataAvail*)avail)
133       ->m_pDataAvail->IsPageAvail(page_index, &hints_wrap);
134 }
135
136 DLLEXPORT int STDCALL FPDFAvail_IsFormAvail(FPDF_AVAIL avail,
137                                             FX_DOWNLOADHINTS* hints) {
138   if (avail == NULL || hints == NULL)
139     return -1;
140   CFPDF_DownloadHintsWrap hints_wrap(hints);
141   return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsFormAvail(&hints_wrap);
142 }
143
144 DLLEXPORT FPDF_BOOL STDCALL FPDFAvail_IsLinearized(FPDF_AVAIL avail) {
145   if (avail == NULL)
146     return -1;
147   return ((CFPDF_DataAvail*)avail)->m_pDataAvail->IsLinearizedPDF();
148 }