Commit df2f5c6a360bd7512d2280aa9cb582bc0aa622bd

Authored by Jay Berkenbilt
1 parent cfaae47d

Add QUtil::make_shared_array to help with PointerHolder transition

include/qpdf/QUtil.hh
... ... @@ -165,6 +165,15 @@ namespace QUtil
165 165 QPDF_DLL
166 166 std::unique_ptr<char[]> make_unique_cstr(std::string const&);
167 167  
  168 + // Create a shared pointer to an array. From c++20,
  169 + // std::make_shared<T[]>(n) does this.
  170 + template <typename T>
  171 + std::shared_ptr<T>
  172 + make_shared_array(size_t n)
  173 + {
  174 + return std::shared_ptr<T>(new T[n], std::default_delete<T[]>());
  175 + }
  176 +
168 177 // Returns lower-case hex-encoded version of the string, treating
169 178 // each character in the input string as unsigned. The output
170 179 // string will be twice as long as the input string.
... ...
libqpdf/QPDFArgParser.cc
... ... @@ -299,9 +299,8 @@ QPDFArgParser::handleArgFileArguments()
299 299 QUtil::make_shared_cstr(this->m->argv[i]));
300 300 }
301 301 }
302   - this->m->argv_ph = std::shared_ptr<char const*>(
303   - new char const*[1 + this->m->new_argv.size()],
304   - std::default_delete<char const*[]>());
  302 + this->m->argv_ph = QUtil::make_shared_array<char const*>(
  303 + 1 + this->m->new_argv.size());
305 304 for (size_t i = 0; i < this->m->new_argv.size(); ++i)
306 305 {
307 306 this->m->argv_ph.get()[i] = this->m->new_argv.at(i).get();
... ... @@ -404,9 +403,8 @@ QPDFArgParser::handleBashArguments()
404 403 }
405 404 // Explicitly discard any non-space-terminated word. The "current
406 405 // word" is handled specially.
407   - this->m->bash_argv_ph = std::shared_ptr<char const*>(
408   - new char const*[1 + this->m->bash_argv.size()],
409   - std::default_delete<char const*[]>());
  406 + this->m->bash_argv_ph = QUtil::make_shared_array<char const*>(
  407 + 1 + this->m->bash_argv.size());
410 408 for (size_t i = 0; i < this->m->bash_argv.size(); ++i)
411 409 {
412 410 this->m->bash_argv_ph.get()[i] = this->m->bash_argv.at(i).get();
... ...
libqpdf/QUtil.cc
... ... @@ -735,9 +735,7 @@ QUtil::copy_string(std::string const&amp; str)
735 735 std::shared_ptr<char>
736 736 QUtil::make_shared_cstr(std::string const& str)
737 737 {
738   - auto result = std::shared_ptr<char>(
739   - new char[str.length() + 1],
740   - std::default_delete<char[]>());
  738 + auto result = QUtil::make_shared_array<char>(str.length() + 1);
741 739 // Use memcpy in case string contains nulls
742 740 result.get()[str.length()] = '\0';
743 741 memcpy(result.get(), str.c_str(), str.length());
... ...