Commit 925ce4e6ffdd0fbc3b3774c6f97268182e5bd8e9
1 parent
b53923d1
In QPDFArgParser refactor argv handling to use `std::string` instead of shared pointers.
Replaces `std::shared_ptr<char const>` with `std::string` for `new_argv` and `bash_argv` to simplify memory management and improve clarity. Updated relevant operations to use `std::string` methods, eliminating unnecessary shared pointer usage.
Showing
2 changed files
with
9 additions
and
9 deletions
libqpdf/QPDFArgParser.cc
| @@ -239,7 +239,7 @@ QPDFArgParser::handleArgFileArguments() | @@ -239,7 +239,7 @@ QPDFArgParser::handleArgFileArguments() | ||
| 239 | // Support reading arguments from files. Create a new argv. Ensure that argv itself as well as | 239 | // Support reading arguments from files. Create a new argv. Ensure that argv itself as well as |
| 240 | // all its contents are automatically deleted by using shared pointers back to the pointers in | 240 | // all its contents are automatically deleted by using shared pointers back to the pointers in |
| 241 | // argv. | 241 | // argv. |
| 242 | - m->new_argv.push_back(QUtil::make_shared_cstr(m->argv[0])); | 242 | + m->new_argv.emplace_back(m->argv[0]); |
| 243 | for (int i = 1; i < m->argc; ++i) { | 243 | for (int i = 1; i < m->argc; ++i) { |
| 244 | char const* argfile = nullptr; | 244 | char const* argfile = nullptr; |
| 245 | if ((strlen(m->argv[i]) > 1) && (m->argv[i][0] == '@')) { | 245 | if ((strlen(m->argv[i]) > 1) && (m->argv[i][0] == '@')) { |
| @@ -254,12 +254,12 @@ QPDFArgParser::handleArgFileArguments() | @@ -254,12 +254,12 @@ QPDFArgParser::handleArgFileArguments() | ||
| 254 | if (argfile) { | 254 | if (argfile) { |
| 255 | readArgsFromFile(1 + m->argv[i]); | 255 | readArgsFromFile(1 + m->argv[i]); |
| 256 | } else { | 256 | } else { |
| 257 | - m->new_argv.push_back(QUtil::make_shared_cstr(m->argv[i])); | 257 | + m->new_argv.emplace_back(m->argv[i]); |
| 258 | } | 258 | } |
| 259 | } | 259 | } |
| 260 | m->argv_ph = QUtil::make_shared_array<char const*>(1 + m->new_argv.size()); | 260 | m->argv_ph = QUtil::make_shared_array<char const*>(1 + m->new_argv.size()); |
| 261 | for (size_t i = 0; i < m->new_argv.size(); ++i) { | 261 | for (size_t i = 0; i < m->new_argv.size(); ++i) { |
| 262 | - m->argv_ph.get()[i] = m->new_argv.at(i).get(); | 262 | + m->argv_ph.get()[i] = m->new_argv.at(i).data(); |
| 263 | } | 263 | } |
| 264 | m->argc = QIntC::to_int(m->new_argv.size()); | 264 | m->argc = QIntC::to_int(m->new_argv.size()); |
| 265 | m->argv_ph.get()[m->argc] = nullptr; | 265 | m->argv_ph.get()[m->argc] = nullptr; |
| @@ -290,7 +290,7 @@ QPDFArgParser::handleBashArguments() | @@ -290,7 +290,7 @@ QPDFArgParser::handleBashArguments() | ||
| 290 | case st_top: | 290 | case st_top: |
| 291 | if (util::is_space(ch)) { | 291 | if (util::is_space(ch)) { |
| 292 | if (!arg.empty()) { | 292 | if (!arg.empty()) { |
| 293 | - m->bash_argv.push_back(QUtil::make_shared_cstr(arg)); | 293 | + m->bash_argv.emplace_back(arg); |
| 294 | arg.clear(); | 294 | arg.clear(); |
| 295 | } | 295 | } |
| 296 | } else if (ch == '"') { | 296 | } else if (ch == '"') { |
| @@ -326,12 +326,12 @@ QPDFArgParser::handleBashArguments() | @@ -326,12 +326,12 @@ QPDFArgParser::handleBashArguments() | ||
| 326 | if (m->bash_argv.empty()) { | 326 | if (m->bash_argv.empty()) { |
| 327 | // This can't happen if properly invoked by bash, but ensure we have a valid argv[0] | 327 | // This can't happen if properly invoked by bash, but ensure we have a valid argv[0] |
| 328 | // regardless. | 328 | // regardless. |
| 329 | - m->bash_argv.push_back(QUtil::make_shared_cstr(m->argv[0])); | 329 | + m->bash_argv.emplace_back(m->argv[0]); |
| 330 | } | 330 | } |
| 331 | // Explicitly discard any non-space-terminated word. The "current word" is handled specially. | 331 | // Explicitly discard any non-space-terminated word. The "current word" is handled specially. |
| 332 | m->bash_argv_ph = QUtil::make_shared_array<char const*>(1 + m->bash_argv.size()); | 332 | m->bash_argv_ph = QUtil::make_shared_array<char const*>(1 + m->bash_argv.size()); |
| 333 | for (size_t i = 0; i < m->bash_argv.size(); ++i) { | 333 | for (size_t i = 0; i < m->bash_argv.size(); ++i) { |
| 334 | - m->bash_argv_ph.get()[i] = m->bash_argv.at(i).get(); | 334 | + m->bash_argv_ph.get()[i] = m->bash_argv.at(i).data(); |
| 335 | } | 335 | } |
| 336 | m->argc = QIntC::to_int(m->bash_argv.size()); | 336 | m->argc = QIntC::to_int(m->bash_argv.size()); |
| 337 | m->bash_argv_ph.get()[m->argc] = nullptr; | 337 | m->bash_argv_ph.get()[m->argc] = nullptr; |
| @@ -360,7 +360,7 @@ QPDFArgParser::readArgsFromFile(std::string const& filename) | @@ -360,7 +360,7 @@ QPDFArgParser::readArgsFromFile(std::string const& filename) | ||
| 360 | lines = QUtil::read_lines_from_file(filename.c_str()); | 360 | lines = QUtil::read_lines_from_file(filename.c_str()); |
| 361 | } | 361 | } |
| 362 | for (auto const& line: lines) { | 362 | for (auto const& line: lines) { |
| 363 | - m->new_argv.push_back(QUtil::make_shared_cstr(line)); | 363 | + m->new_argv.emplace_back(line); |
| 364 | } | 364 | } |
| 365 | } | 365 | } |
| 366 | 366 |
libqpdf/qpdf/QPDFArgParser.hh
| @@ -219,8 +219,8 @@ class QPDFArgParser | @@ -219,8 +219,8 @@ class QPDFArgParser | ||
| 219 | option_table_t* option_table; | 219 | option_table_t* option_table; |
| 220 | std::string option_table_name; | 220 | std::string option_table_name; |
| 221 | bare_arg_handler_t final_check_handler; | 221 | bare_arg_handler_t final_check_handler; |
| 222 | - std::vector<std::shared_ptr<char const>> new_argv; | ||
| 223 | - std::vector<std::shared_ptr<char const>> bash_argv; | 222 | + std::vector<std::string> new_argv; |
| 223 | + std::vector<std::string> bash_argv; | ||
| 224 | std::shared_ptr<char const*> argv_ph; | 224 | std::shared_ptr<char const*> argv_ph; |
| 225 | std::shared_ptr<char const*> bash_argv_ph; | 225 | std::shared_ptr<char const*> bash_argv_ph; |
| 226 | std::map<std::string, HelpTopic> help_topics; | 226 | std::map<std::string, HelpTopic> help_topics; |