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 | 239 | // Support reading arguments from files. Create a new argv. Ensure that argv itself as well as |
| 240 | 240 | // all its contents are automatically deleted by using shared pointers back to the pointers in |
| 241 | 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 | 243 | for (int i = 1; i < m->argc; ++i) { |
| 244 | 244 | char const* argfile = nullptr; |
| 245 | 245 | if ((strlen(m->argv[i]) > 1) && (m->argv[i][0] == '@')) { |
| ... | ... | @@ -254,12 +254,12 @@ QPDFArgParser::handleArgFileArguments() |
| 254 | 254 | if (argfile) { |
| 255 | 255 | readArgsFromFile(1 + m->argv[i]); |
| 256 | 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 | 260 | m->argv_ph = QUtil::make_shared_array<char const*>(1 + m->new_argv.size()); |
| 261 | 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 | 264 | m->argc = QIntC::to_int(m->new_argv.size()); |
| 265 | 265 | m->argv_ph.get()[m->argc] = nullptr; |
| ... | ... | @@ -290,7 +290,7 @@ QPDFArgParser::handleBashArguments() |
| 290 | 290 | case st_top: |
| 291 | 291 | if (util::is_space(ch)) { |
| 292 | 292 | if (!arg.empty()) { |
| 293 | - m->bash_argv.push_back(QUtil::make_shared_cstr(arg)); | |
| 293 | + m->bash_argv.emplace_back(arg); | |
| 294 | 294 | arg.clear(); |
| 295 | 295 | } |
| 296 | 296 | } else if (ch == '"') { |
| ... | ... | @@ -326,12 +326,12 @@ QPDFArgParser::handleBashArguments() |
| 326 | 326 | if (m->bash_argv.empty()) { |
| 327 | 327 | // This can't happen if properly invoked by bash, but ensure we have a valid argv[0] |
| 328 | 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 | 331 | // Explicitly discard any non-space-terminated word. The "current word" is handled specially. |
| 332 | 332 | m->bash_argv_ph = QUtil::make_shared_array<char const*>(1 + m->bash_argv.size()); |
| 333 | 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 | 336 | m->argc = QIntC::to_int(m->bash_argv.size()); |
| 337 | 337 | m->bash_argv_ph.get()[m->argc] = nullptr; |
| ... | ... | @@ -360,7 +360,7 @@ QPDFArgParser::readArgsFromFile(std::string const& filename) |
| 360 | 360 | lines = QUtil::read_lines_from_file(filename.c_str()); |
| 361 | 361 | } |
| 362 | 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 | 219 | option_table_t* option_table; |
| 220 | 220 | std::string option_table_name; |
| 221 | 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 | 224 | std::shared_ptr<char const*> argv_ph; |
| 225 | 225 | std::shared_ptr<char const*> bash_argv_ph; |
| 226 | 226 | std::map<std::string, HelpTopic> help_topics; | ... | ... |