Commit 925ce4e6ffdd0fbc3b3774c6f97268182e5bd8e9

Authored by m-holger
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.
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&amp; filename) @@ -360,7 +360,7 @@ QPDFArgParser::readArgsFromFile(std::string const&amp; 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;