Commit 0f67d851398d0647ad2b24abebb1e92ddf72cbdc
1 parent
a43b8312
Refactor `QPDFJob::Inputs`: add `clear` method to centralize QPDF object cleanup…
…, replace redundant file warning logic in `handlePageSpecs`, and simplify resource management.
Showing
3 changed files
with
21 additions
and
13 deletions
include/qpdf/QPDFJob.hh
| ... | ... | @@ -461,7 +461,7 @@ class QPDFJob |
| 461 | 461 | |
| 462 | 462 | // Transformations |
| 463 | 463 | void setQPDFOptions(QPDF& pdf); |
| 464 | - bool handlePageSpecs(QPDF& pdf); | |
| 464 | + void handlePageSpecs(QPDF& pdf); | |
| 465 | 465 | bool shouldRemoveUnreferencedResources(QPDF& pdf); |
| 466 | 466 | void new_selection( |
| 467 | 467 | std::string const& filename, std::string const& password, std::string const& range); | ... | ... |
libqpdf/QPDFJob.cc
| ... | ... | @@ -426,15 +426,14 @@ QPDFJob::createQPDF() |
| 426 | 426 | } |
| 427 | 427 | |
| 428 | 428 | if (!m->selections.empty()) { |
| 429 | - if (!handlePageSpecs(pdf)) { | |
| 430 | - m->warnings = true; | |
| 431 | - } | |
| 429 | + handlePageSpecs(pdf); | |
| 432 | 430 | } |
| 433 | 431 | if (!m->rotations.empty()) { |
| 434 | 432 | handleRotations(pdf); |
| 435 | 433 | } |
| 436 | 434 | handleUnderOverlay(pdf); |
| 437 | 435 | handleTransformations(pdf); |
| 436 | + m->warnings |= m->inputs.clear(); | |
| 438 | 437 | |
| 439 | 438 | auto root = pdf.getRoot(); |
| 440 | 439 | if (m->remove_info) { |
| ... | ... | @@ -2414,8 +2413,21 @@ QPDFJob::Inputs::process_all() |
| 2414 | 2413 | } |
| 2415 | 2414 | } |
| 2416 | 2415 | |
| 2417 | -// Handle all page specifications. Return true if it succeeded without warnings. | |
| 2418 | 2416 | bool |
| 2417 | +QPDFJob::Inputs::clear() | |
| 2418 | +{ | |
| 2419 | + bool any_warnings = false; | |
| 2420 | + for (auto& [filename, file_spec]: files) { | |
| 2421 | + if (auto& pdf = file_spec.qpdf_p) { | |
| 2422 | + any_warnings |= pdf->anyWarnings(); | |
| 2423 | + pdf = nullptr; | |
| 2424 | + } | |
| 2425 | + } | |
| 2426 | + return any_warnings; | |
| 2427 | +} | |
| 2428 | + | |
| 2429 | +// Handle all page specifications. | |
| 2430 | +void | |
| 2419 | 2431 | QPDFJob::handlePageSpecs(QPDF& pdf) |
| 2420 | 2432 | { |
| 2421 | 2433 | auto& main_input = m->inputs.files[m->infilename]; |
| ... | ... | @@ -2615,14 +2627,6 @@ QPDFJob::handlePageSpecs(QPDF& pdf) |
| 2615 | 2627 | } |
| 2616 | 2628 | } |
| 2617 | 2629 | } |
| 2618 | - for (auto& foreign: m->inputs.files) { | |
| 2619 | - if (foreign.second.qpdf_p) { // exclude main input | |
| 2620 | - if (foreign.second.qpdf->anyWarnings()) { | |
| 2621 | - return false; | |
| 2622 | - } | |
| 2623 | - } | |
| 2624 | - } | |
| 2625 | - return true; | |
| 2626 | 2630 | } |
| 2627 | 2631 | |
| 2628 | 2632 | void | ... | ... |
libqpdf/qpdf/QPDFJob_private.hh
| ... | ... | @@ -62,6 +62,10 @@ struct QPDFJob::Inputs |
| 62 | 62 | } |
| 63 | 63 | void process(std::string const& filename, QPDFJob::Input& file_spec); |
| 64 | 64 | void process_all(); |
| 65 | + | |
| 66 | + // Destroy all owned QPDF objects. Return false if any of the QPDF objects recorded warnings. | |
| 67 | + bool clear(); | |
| 68 | + | |
| 65 | 69 | std::string encryption_file; |
| 66 | 70 | std::string encryption_file_password; |
| 67 | 71 | bool keep_files_open{true}; | ... | ... |