Commit e4905983d2751b4b0f7ae535cdffee2be7fbf36f

Authored by Jay Berkenbilt
1 parent e5edfc78

QPDFJob: convert outfilename to shared pointer

include/qpdf/QPDFJob.hh
@@ -310,7 +310,7 @@ class QPDFJob @@ -310,7 +310,7 @@ class QPDFJob
310 bool check_is_encrypted; 310 bool check_is_encrypted;
311 bool check_requires_password; 311 bool check_requires_password;
312 std::shared_ptr<char> infilename; 312 std::shared_ptr<char> infilename;
313 - char const* outfilename; 313 + std::shared_ptr<char> outfilename;
314 // QXXXQ END-PUBLIC 314 // QXXXQ END-PUBLIC
315 315
316 private: 316 private:
libqpdf/QPDFJob.cc
@@ -414,7 +414,6 @@ QPDFJob::QPDFJob() : @@ -414,7 +414,6 @@ QPDFJob::QPDFJob() :
414 replace_input(false), 414 replace_input(false),
415 check_is_encrypted(false), 415 check_is_encrypted(false),
416 check_requires_password(false), 416 check_requires_password(false),
417 - outfilename(0),  
418 m(new Members()) 417 m(new Members())
419 { 418 {
420 } 419 }
@@ -3257,7 +3256,8 @@ QPDFJob::setWriterOptions(QPDF&amp; pdf, QPDFWriter&amp; w) @@ -3257,7 +3256,8 @@ QPDFJob::setWriterOptions(QPDF&amp; pdf, QPDFWriter&amp; w)
3257 { 3256 {
3258 w.registerProgressReporter( 3257 w.registerProgressReporter(
3259 new ProgressReporter( 3258 new ProgressReporter(
3260 - *(this->m->cout), this->m->message_prefix, o.outfilename)); 3259 + *(this->m->cout), this->m->message_prefix,
  3260 + o.outfilename.get()));
3261 } 3261 }
3262 } 3262 }
3263 3263
@@ -3268,27 +3268,27 @@ QPDFJob::doSplitPages(QPDF&amp; pdf, bool&amp; warnings) @@ -3268,27 +3268,27 @@ QPDFJob::doSplitPages(QPDF&amp; pdf, bool&amp; warnings)
3268 // Generate output file pattern 3268 // Generate output file pattern
3269 std::string before; 3269 std::string before;
3270 std::string after; 3270 std::string after;
3271 - size_t len = strlen(o.outfilename);  
3272 - char* num_spot = strstr(const_cast<char*>(o.outfilename), "%d"); 3271 + size_t len = strlen(o.outfilename.get());
  3272 + char* num_spot = strstr(const_cast<char*>(o.outfilename.get()), "%d");
3273 if (num_spot != 0) 3273 if (num_spot != 0)
3274 { 3274 {
3275 QTC::TC("qpdf", "qpdf split-pages %d"); 3275 QTC::TC("qpdf", "qpdf split-pages %d");
3276 - before = std::string(o.outfilename,  
3277 - QIntC::to_size(num_spot - o.outfilename)); 3276 + before = std::string(o.outfilename.get(),
  3277 + QIntC::to_size(num_spot - o.outfilename.get()));
3278 after = num_spot + 2; 3278 after = num_spot + 2;
3279 } 3279 }
3280 else if ((len >= 4) && 3280 else if ((len >= 4) &&
3281 (QUtil::str_compare_nocase( 3281 (QUtil::str_compare_nocase(
3282 - o.outfilename + len - 4, ".pdf") == 0)) 3282 + o.outfilename.get() + len - 4, ".pdf") == 0))
3283 { 3283 {
3284 QTC::TC("qpdf", "qpdf split-pages .pdf"); 3284 QTC::TC("qpdf", "qpdf split-pages .pdf");
3285 - before = std::string(o.outfilename, len - 4) + "-";  
3286 - after = o.outfilename + len - 4; 3285 + before = std::string(o.outfilename.get(), len - 4) + "-";
  3286 + after = o.outfilename.get() + len - 4;
3287 } 3287 }
3288 else 3288 else
3289 { 3289 {
3290 QTC::TC("qpdf", "qpdf split-pages other"); 3290 QTC::TC("qpdf", "qpdf split-pages other");
3291 - before = std::string(o.outfilename) + "-"; 3291 + before = std::string(o.outfilename.get()) + "-";
3292 } 3292 }
3293 3293
3294 if (shouldRemoveUnreferencedResources(pdf)) 3294 if (shouldRemoveUnreferencedResources(pdf))
@@ -3385,24 +3385,25 @@ void @@ -3385,24 +3385,25 @@ void
3385 QPDFJob::writeOutfile(QPDF& pdf) 3385 QPDFJob::writeOutfile(QPDF& pdf)
3386 { 3386 {
3387 QPDFJob& o = *this; // QXXXQ 3387 QPDFJob& o = *this; // QXXXQ
3388 - std::string temp_out; 3388 + std::shared_ptr<char> temp_out;
3389 if (o.replace_input) 3389 if (o.replace_input)
3390 { 3390 {
3391 // Append but don't prepend to the path to generate a 3391 // Append but don't prepend to the path to generate a
3392 // temporary name. This saves us from having to split the path 3392 // temporary name. This saves us from having to split the path
3393 // by directory and non-directory. 3393 // by directory and non-directory.
3394 - temp_out = std::string(o.infilename.get()) + ".~qpdf-temp#"; 3394 + temp_out = QUtil::make_shared_cstr(
  3395 + std::string(o.infilename.get()) + ".~qpdf-temp#");
3395 // o.outfilename will be restored to 0 before temp_out 3396 // o.outfilename will be restored to 0 before temp_out
3396 // goes out of scope. 3397 // goes out of scope.
3397 - o.outfilename = temp_out.c_str(); 3398 + o.outfilename = temp_out;
3398 } 3399 }
3399 - else if (strcmp(o.outfilename, "-") == 0) 3400 + else if (strcmp(o.outfilename.get(), "-") == 0)
3400 { 3401 {
3401 o.outfilename = 0; 3402 o.outfilename = 0;
3402 } 3403 }
3403 { 3404 {
3404 // Private scope so QPDFWriter will close the output file 3405 // Private scope so QPDFWriter will close the output file
3405 - QPDFWriter w(pdf, o.outfilename); 3406 + QPDFWriter w(pdf, o.outfilename.get());
3406 setWriterOptions(pdf, w); 3407 setWriterOptions(pdf, w);
3407 w.write(); 3408 w.write();
3408 } 3409 }
@@ -3427,7 +3428,7 @@ QPDFJob::writeOutfile(QPDF&amp; pdf) @@ -3427,7 +3428,7 @@ QPDFJob::writeOutfile(QPDF&amp; pdf)
3427 backup.append(1, '#'); 3428 backup.append(1, '#');
3428 } 3429 }
3429 QUtil::rename_file(o.infilename.get(), backup.c_str()); 3430 QUtil::rename_file(o.infilename.get(), backup.c_str());
3430 - QUtil::rename_file(temp_out.c_str(), o.infilename.get()); 3431 + QUtil::rename_file(temp_out.get(), o.infilename.get());
3431 if (warnings) 3432 if (warnings)
3432 { 3433 {
3433 *(this->m->cerr) 3434 *(this->m->cerr)
libqpdf/QPDFJob_argv.cc
@@ -72,7 +72,7 @@ ArgParser::argPositional(char* arg) @@ -72,7 +72,7 @@ ArgParser::argPositional(char* arg)
72 } 72 }
73 else if (o.outfilename == 0) 73 else if (o.outfilename == 0)
74 { 74 {
75 - o.outfilename = arg; 75 + o.outfilename = QUtil::make_shared_cstr(arg);
76 } 76 }
77 else 77 else
78 { 78 {
@@ -1494,7 +1494,7 @@ ArgParser::doFinalChecks() @@ -1494,7 +1494,7 @@ ArgParser::doFinalChecks()
1494 } 1494 }
1495 1495
1496 if (o.require_outfile && o.outfilename && 1496 if (o.require_outfile && o.outfilename &&
1497 - (strcmp(o.outfilename, "-") == 0)) 1497 + (strcmp(o.outfilename.get(), "-") == 0))
1498 { 1498 {
1499 if (o.split_pages) 1499 if (o.split_pages)
1500 { 1500 {
@@ -1514,7 +1514,7 @@ ArgParser::doFinalChecks() @@ -1514,7 +1514,7 @@ ArgParser::doFinalChecks()
1514 } 1514 }
1515 1515
1516 if ((! o.split_pages) && 1516 if ((! o.split_pages) &&
1517 - QUtil::same_file(o.infilename.get(), o.outfilename)) 1517 + QUtil::same_file(o.infilename.get(), o.outfilename.get()))
1518 { 1518 {
1519 QTC::TC("qpdf", "qpdf same file error"); 1519 QTC::TC("qpdf", "qpdf same file error");
1520 usage("input file and output file are the same;" 1520 usage("input file and output file are the same;"