aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2018-06-22 18:15:22 +0200
committerJay Berkenbilt <ejb@ql.org>2018-06-22 18:52:45 +0200
commit4ccc8b1a44109a913c87f31029c9c17db30ecc43 (patch)
treefb2259c3507896c252037aca9b14e2d93acb2259 /include
parent32ddcec91e77b9f6a52480c3393ab17cbc105880 (diff)
downloadqpdf-4ccc8b1a44109a913c87f31029c9c17db30ecc43.tar.zst
Add ClosedFileInputSource
ClosedFileInputSource is an input source that keeps the file closed when not reading it.
Diffstat (limited to 'include')
-rw-r--r--include/qpdf/ClosedFileInputSource.hh83
1 files changed, 83 insertions, 0 deletions
diff --git a/include/qpdf/ClosedFileInputSource.hh b/include/qpdf/ClosedFileInputSource.hh
new file mode 100644
index 00000000..349b938a
--- /dev/null
+++ b/include/qpdf/ClosedFileInputSource.hh
@@ -0,0 +1,83 @@
+// Copyright (c) 2005-2018 Jay Berkenbilt
+//
+// This file is part of qpdf.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Versions of qpdf prior to version 7 were released under the terms
+// of version 2.0 of the Artistic License. At your option, you may
+// continue to consider qpdf to be licensed under those terms. Please
+// see the manual for additional information.
+
+#ifndef __QPDF_CLOSEDFILEINPUTSOURCE_HH__
+#define __QPDF_CLOSEDFILEINPUTSOURCE_HH__
+
+// This is an input source that reads from files, like
+// FileInputSource, except that it opens and close the file
+// surrounding every operation. This decreases effiency, but it allows
+// many more of these to exist at once than the maximum number of open
+// file descriptors. This is used for merging large numbers of files.
+
+#include <qpdf/InputSource.hh>
+#include <qpdf/PointerHolder.hh>
+
+class FileInputSource;
+
+class ClosedFileInputSource: public InputSource
+{
+ public:
+ QPDF_DLL
+ ClosedFileInputSource(char const* filename);
+ QPDF_DLL
+ virtual ~ClosedFileInputSource();
+ QPDF_DLL
+ virtual qpdf_offset_t findAndSkipNextEOL();
+ QPDF_DLL
+ virtual std::string const& getName() const;
+ QPDF_DLL
+ virtual qpdf_offset_t tell();
+ QPDF_DLL
+ virtual void seek(qpdf_offset_t offset, int whence);
+ QPDF_DLL
+ virtual void rewind();
+ QPDF_DLL
+ virtual size_t read(char* buffer, size_t length);
+ QPDF_DLL
+ virtual void unreadCh(char ch);
+
+ private:
+ ClosedFileInputSource(ClosedFileInputSource const&);
+ ClosedFileInputSource& operator=(ClosedFileInputSource const&);
+
+ void before();
+ void after();
+
+ class Members
+ {
+ friend class ClosedFileInputSource;
+
+ public:
+ QPDF_DLL
+ ~Members();
+
+ private:
+ Members(char const* filename);
+
+ std::string filename;
+ qpdf_offset_t offset;
+ FileInputSource* fis;
+ };
+ PointerHolder<Members> m;
+};
+
+#endif // __QPDF_CLOSEDFILEINPUTSOURCE_HH__