Commit e5f3910c3ee1f6b779455fb1516ab3c985383d8e
1 parent
e2596359
Add new FileInputSource constructors
Showing
8 changed files
with
28 additions
and
12 deletions
ChangeLog
| 1 | 2022-05-04 Jay Berkenbilt <ejb@ql.org> | 1 | 2022-05-04 Jay Berkenbilt <ejb@ql.org> |
| 2 | 2 | ||
| 3 | + * FileInputSource has new constructors that eliminate the need to | ||
| 4 | + call setFilename or setFile in most cases. | ||
| 5 | + | ||
| 3 | * Enhance JSON by adding a write method that takes a Pipeline* and | 6 | * Enhance JSON by adding a write method that takes a Pipeline* and |
| 4 | depth, and add several helper methods to make it easier to write | 7 | depth, and add several helper methods to make it easier to write |
| 5 | large amounts of JSON incrementally without having to have the | 8 | large amounts of JSON incrementally without having to have the |
include/qpdf/FileInputSource.hh
| @@ -30,6 +30,10 @@ class QPDF_DLL_CLASS FileInputSource: public InputSource | @@ -30,6 +30,10 @@ class QPDF_DLL_CLASS FileInputSource: public InputSource | ||
| 30 | QPDF_DLL | 30 | QPDF_DLL |
| 31 | FileInputSource(); | 31 | FileInputSource(); |
| 32 | QPDF_DLL | 32 | QPDF_DLL |
| 33 | + FileInputSource(char const* filename); | ||
| 34 | + QPDF_DLL | ||
| 35 | + FileInputSource(char const* description, FILE* filep, bool close_file); | ||
| 36 | + QPDF_DLL | ||
| 33 | void setFilename(char const* filename); | 37 | void setFilename(char const* filename); |
| 34 | QPDF_DLL | 38 | QPDF_DLL |
| 35 | void setFile(char const* description, FILE* filep, bool close_file); | 39 | void setFile(char const* description, FILE* filep, bool close_file); |
libqpdf/ClosedFileInputSource.cc
| @@ -24,8 +24,8 @@ void | @@ -24,8 +24,8 @@ void | ||
| 24 | ClosedFileInputSource::before() | 24 | ClosedFileInputSource::before() |
| 25 | { | 25 | { |
| 26 | if (0 == this->m->fis.get()) { | 26 | if (0 == this->m->fis.get()) { |
| 27 | - this->m->fis = std::make_shared<FileInputSource>(); | ||
| 28 | - this->m->fis->setFilename(this->m->filename.c_str()); | 27 | + this->m->fis = |
| 28 | + std::make_shared<FileInputSource>(this->m->filename.c_str()); | ||
| 29 | this->m->fis->seek(this->m->offset, SEEK_SET); | 29 | this->m->fis->seek(this->m->offset, SEEK_SET); |
| 30 | this->m->fis->setLastOffset(this->last_offset); | 30 | this->m->fis->setLastOffset(this->last_offset); |
| 31 | } | 31 | } |
libqpdf/FileInputSource.cc
| @@ -23,6 +23,19 @@ FileInputSource::FileInputSource() : | @@ -23,6 +23,19 @@ FileInputSource::FileInputSource() : | ||
| 23 | { | 23 | { |
| 24 | } | 24 | } |
| 25 | 25 | ||
| 26 | +FileInputSource::FileInputSource(char const* filename) : | ||
| 27 | + m(new Members(false)) | ||
| 28 | +{ | ||
| 29 | + setFilename(filename); | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | +FileInputSource::FileInputSource( | ||
| 33 | + char const* description, FILE* filep, bool close_file) : | ||
| 34 | + m(new Members(false)) | ||
| 35 | +{ | ||
| 36 | + setFile(description, filep, close_file); | ||
| 37 | +} | ||
| 38 | + | ||
| 26 | void | 39 | void |
| 27 | FileInputSource::setFilename(char const* filename) | 40 | FileInputSource::setFilename(char const* filename) |
| 28 | { | 41 | { |
libqpdf/QPDF.cc
| @@ -270,8 +270,7 @@ QPDF::~QPDF() | @@ -270,8 +270,7 @@ QPDF::~QPDF() | ||
| 270 | void | 270 | void |
| 271 | QPDF::processFile(char const* filename, char const* password) | 271 | QPDF::processFile(char const* filename, char const* password) |
| 272 | { | 272 | { |
| 273 | - FileInputSource* fi = new FileInputSource(); | ||
| 274 | - fi->setFilename(filename); | 273 | + FileInputSource* fi = new FileInputSource(filename); |
| 275 | processInputSource(std::shared_ptr<InputSource>(fi), password); | 274 | processInputSource(std::shared_ptr<InputSource>(fi), password); |
| 276 | } | 275 | } |
| 277 | 276 | ||
| @@ -279,8 +278,7 @@ void | @@ -279,8 +278,7 @@ void | ||
| 279 | QPDF::processFile( | 278 | QPDF::processFile( |
| 280 | char const* description, FILE* filep, bool close_file, char const* password) | 279 | char const* description, FILE* filep, bool close_file, char const* password) |
| 281 | { | 280 | { |
| 282 | - FileInputSource* fi = new FileInputSource(); | ||
| 283 | - fi->setFile(description, filep, close_file); | 281 | + FileInputSource* fi = new FileInputSource(description, filep, close_file); |
| 284 | processInputSource(std::shared_ptr<InputSource>(fi), password); | 282 | processInputSource(std::shared_ptr<InputSource>(fi), password); |
| 285 | } | 283 | } |
| 286 | 284 |
libqpdf/QPDFJob.cc
| @@ -2445,9 +2445,9 @@ QPDFJob::handlePageSpecs( | @@ -2445,9 +2445,9 @@ QPDFJob::handlePageSpecs( | ||
| 2445 | cis->stayOpen(true); | 2445 | cis->stayOpen(true); |
| 2446 | } else { | 2446 | } else { |
| 2447 | QTC::TC("qpdf", "QPDFJob keep files open y"); | 2447 | QTC::TC("qpdf", "QPDFJob keep files open y"); |
| 2448 | - FileInputSource* fis = new FileInputSource(); | 2448 | + FileInputSource* fis = |
| 2449 | + new FileInputSource(page_spec.filename.c_str()); | ||
| 2449 | is = std::shared_ptr<InputSource>(fis); | 2450 | is = std::shared_ptr<InputSource>(fis); |
| 2450 | - fis->setFilename(page_spec.filename.c_str()); | ||
| 2451 | } | 2451 | } |
| 2452 | std::shared_ptr<QPDF> qpdf_ph = | 2452 | std::shared_ptr<QPDF> qpdf_ph = |
| 2453 | processInputSource(is, password, true); | 2453 | processInputSource(is, password, true); |
libtests/closed_file_input_source.cc
| @@ -73,8 +73,7 @@ main() | @@ -73,8 +73,7 @@ main() | ||
| 73 | do_tests(&cf2); | 73 | do_tests(&cf2); |
| 74 | cf2.stayOpen(false); | 74 | cf2.stayOpen(false); |
| 75 | std::cout << "testing with FileInputSource\n"; | 75 | std::cout << "testing with FileInputSource\n"; |
| 76 | - FileInputSource f; | ||
| 77 | - f.setFilename("input"); | 76 | + FileInputSource f("input"); |
| 78 | do_tests(&f); | 77 | do_tests(&f); |
| 79 | std::cout << "all assertions passed" << std::endl; | 78 | std::cout << "all assertions passed" << std::endl; |
| 80 | return 0; | 79 | return 0; |
qpdf/test_tokenizer.cc
| @@ -191,8 +191,7 @@ process(char const* filename, bool include_ignorable, size_t max_len) | @@ -191,8 +191,7 @@ process(char const* filename, bool include_ignorable, size_t max_len) | ||
| 191 | std::shared_ptr<InputSource> is; | 191 | std::shared_ptr<InputSource> is; |
| 192 | 192 | ||
| 193 | // Tokenize file, skipping streams | 193 | // Tokenize file, skipping streams |
| 194 | - FileInputSource* fis = new FileInputSource(); | ||
| 195 | - fis->setFilename(filename); | 194 | + FileInputSource* fis = new FileInputSource(filename); |
| 196 | is = std::shared_ptr<InputSource>(fis); | 195 | is = std::shared_ptr<InputSource>(fis); |
| 197 | dump_tokens(is, "FILE", max_len, include_ignorable, true, false); | 196 | dump_tokens(is, "FILE", max_len, include_ignorable, true, false); |
| 198 | 197 |