Commit e5f3910c3ee1f6b779455fb1516ab3c985383d8e

Authored by Jay Berkenbilt
1 parent e2596359

Add new FileInputSource constructors

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