Commit 200213727a24b40563885950eeed51549ce64ad4
1 parent
7fa74c4f
Refactor `QPDFJob`: replace `page_spec_cfis` map with `cfis` in `Input`, streaml…
…ine file handling and resource management logic.
Showing
2 changed files
with
21 additions
and
23 deletions
libqpdf/QPDFJob.cc
| ... | ... | @@ -2376,7 +2376,6 @@ QPDFJob::handlePageSpecs(QPDF& pdf) |
| 2376 | 2376 | } |
| 2377 | 2377 | |
| 2378 | 2378 | // Create a QPDF object for each file that we may take pages from. |
| 2379 | - std::map<std::string, ClosedFileInputSource*> page_spec_cfis; | |
| 2380 | 2379 | std::map<unsigned long long, std::set<QPDFObjGen>> copied_pages; |
| 2381 | 2380 | for (auto& selection: m->selections) { |
| 2382 | 2381 | auto& input = m->inputs.files[selection.filename]; |
| ... | ... | @@ -2396,21 +2395,22 @@ QPDFJob::handlePageSpecs(QPDF& pdf) |
| 2396 | 2395 | doIfVerbose([&](Pipeline& v, std::string const& prefix) { |
| 2397 | 2396 | v << prefix << ": processing " << selection.filename << "\n"; |
| 2398 | 2397 | }); |
| 2399 | - std::shared_ptr<InputSource> is; | |
| 2400 | - ClosedFileInputSource* cis = nullptr; | |
| 2401 | 2398 | if (!m->keep_files_open) { |
| 2402 | - cis = new ClosedFileInputSource(selection.filename.data()); | |
| 2403 | - is = std::shared_ptr<InputSource>(cis); | |
| 2399 | + auto cis = std::make_shared<ClosedFileInputSource>(selection.filename.data()); | |
| 2404 | 2400 | cis->stayOpen(true); |
| 2401 | + processInputSource(input.qpdf_p, cis, password.data(), true); | |
| 2402 | + cis->stayOpen(false); | |
| 2403 | + input.cfis = cis.get(); | |
| 2405 | 2404 | } else { |
| 2406 | - FileInputSource* fis = new FileInputSource(selection.filename.data()); | |
| 2407 | - is = std::shared_ptr<InputSource>(fis); | |
| 2405 | + processInputSource( | |
| 2406 | + input.qpdf_p, | |
| 2407 | + std::make_shared<FileInputSource>(selection.filename.data()), | |
| 2408 | + password.data(), | |
| 2409 | + true); | |
| 2408 | 2410 | } |
| 2409 | - processInputSource(input.qpdf_p, is, password.data(), true); | |
| 2410 | 2411 | input.qpdf = input.qpdf_p.get(); |
| 2411 | - if (cis) { | |
| 2412 | - cis->stayOpen(false); | |
| 2413 | - page_spec_cfis[selection.filename] = cis; | |
| 2412 | + if (input.cfis) { | |
| 2413 | + input.cfis->stayOpen(false); | |
| 2414 | 2414 | } |
| 2415 | 2415 | } |
| 2416 | 2416 | |
| ... | ... | @@ -2430,18 +2430,16 @@ QPDFJob::handlePageSpecs(QPDF& pdf) |
| 2430 | 2430 | std::map<unsigned long long, bool> remove_unreferenced; |
| 2431 | 2431 | if (m->remove_unreferenced_page_resources != QPDFJob::re_no) { |
| 2432 | 2432 | for (auto const& [filename, input]: m->inputs.files) { |
| 2433 | - ClosedFileInputSource* cis = nullptr; | |
| 2434 | - if (page_spec_cfis.contains(filename)) { | |
| 2435 | - cis = page_spec_cfis[filename]; | |
| 2436 | - cis->stayOpen(true); | |
| 2433 | + if (input.cfis) { | |
| 2434 | + input.cfis->stayOpen(true); | |
| 2437 | 2435 | } |
| 2438 | 2436 | QPDF& other(*input.qpdf); |
| 2439 | 2437 | auto other_uuid = other.getUniqueId(); |
| 2440 | 2438 | if (!remove_unreferenced.contains(other_uuid)) { |
| 2441 | 2439 | remove_unreferenced[other_uuid] = shouldRemoveUnreferencedResources(other); |
| 2442 | 2440 | } |
| 2443 | - if (cis) { | |
| 2444 | - cis->stayOpen(false); | |
| 2441 | + if (input.cfis) { | |
| 2442 | + input.cfis->stayOpen(false); | |
| 2445 | 2443 | } |
| 2446 | 2444 | } |
| 2447 | 2445 | } |
| ... | ... | @@ -2502,10 +2500,9 @@ QPDFJob::handlePageSpecs(QPDF& pdf) |
| 2502 | 2500 | auto& this_afdh = pdf.acroform(); |
| 2503 | 2501 | std::set<QPDFObjGen> referenced_fields; |
| 2504 | 2502 | for (auto& page_data: page_specs) { |
| 2505 | - ClosedFileInputSource* cis = nullptr; | |
| 2506 | - if (page_spec_cfis.contains(page_data.filename)) { | |
| 2507 | - cis = page_spec_cfis[page_data.filename]; | |
| 2508 | - cis->stayOpen(true); | |
| 2503 | + auto& input = m->inputs.files[page_data.filename]; | |
| 2504 | + if (input.cfis) { | |
| 2505 | + input.cfis->stayOpen(true); | |
| 2509 | 2506 | } |
| 2510 | 2507 | auto& pldh = page_data.qpdf->page_labels(); |
| 2511 | 2508 | auto& other_afdh = page_data.qpdf->acroform(); |
| ... | ... | @@ -2570,8 +2567,8 @@ QPDFJob::handlePageSpecs(QPDF& pdf) |
| 2570 | 2567 | } |
| 2571 | 2568 | } |
| 2572 | 2569 | } |
| 2573 | - if (cis) { | |
| 2574 | - cis->stayOpen(false); | |
| 2570 | + if (input.cfis) { | |
| 2571 | + input.cfis->stayOpen(false); | |
| 2575 | 2572 | } |
| 2576 | 2573 | } |
| 2577 | 2574 | if (any_page_labels) { | ... | ... |