aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFArgParser.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-01-22 23:37:51 +0100
committerJay Berkenbilt <ejb@ql.org>2022-01-30 19:11:03 +0100
commit1a8c2eb93b3116a3057e8009b8cbd7510abaf138 (patch)
treeca849cbb6107bde18577ea2a4be5404dd2763b42 /libqpdf/QPDFArgParser.cc
parent76c4f78b5cfd786b90069f7256252229444fdecd (diff)
downloadqpdf-1a8c2eb93b3116a3057e8009b8cbd7510abaf138.tar.zst
QPDFJob: use std::shared_ptr over PointerHolder where possible
Also fix QPDFArgParser
Diffstat (limited to 'libqpdf/QPDFArgParser.cc')
-rw-r--r--libqpdf/QPDFArgParser.cc39
1 files changed, 17 insertions, 22 deletions
diff --git a/libqpdf/QPDFArgParser.cc b/libqpdf/QPDFArgParser.cc
index 8d7c978c..33d50a10 100644
--- a/libqpdf/QPDFArgParser.cc
+++ b/libqpdf/QPDFArgParser.cc
@@ -295,10 +295,8 @@ QPDFArgParser::handleArgFileArguments()
{
// Support reading arguments from files. Create a new argv. Ensure
// that argv itself as well as all its contents are automatically
- // deleted by using PointerHolder objects to back the pointers in
- // argv.
- this->m->new_argv.push_back(
- PointerHolder<char>(true, QUtil::copy_string(this->m->argv[0])));
+ // deleted by using shared pointers to back the pointers in argv.
+ this->m->new_argv.push_back(QUtil::make_shared_cstr(this->m->argv[0]));
for (int i = 1; i < this->m->argc; ++i)
{
char* argfile = 0;
@@ -321,16 +319,16 @@ QPDFArgParser::handleArgFileArguments()
else
{
this->m->new_argv.push_back(
- PointerHolder<char>(
- true, QUtil::copy_string(this->m->argv[i])));
+ QUtil::make_shared_cstr(this->m->argv[i]));
}
}
- this->m->argv_ph =
- PointerHolder<char*>(true, new char*[1 + this->m->new_argv.size()]);
- this->m->argv = this->m->argv_ph.getPointer();
+ this->m->argv_ph = std::shared_ptr<char*>(
+ new char*[1 + this->m->new_argv.size()],
+ std::default_delete<char*[]>());
+ this->m->argv = this->m->argv_ph.get();
for (size_t i = 0; i < this->m->new_argv.size(); ++i)
{
- this->m->argv[i] = this->m->new_argv.at(i).getPointer();
+ this->m->argv[i] = this->m->new_argv.at(i).get();
}
this->m->argc = QIntC::to_int(this->m->new_argv.size());
this->m->argv[this->m->argc] = 0;
@@ -374,8 +372,7 @@ QPDFArgParser::handleBashArguments()
if (! arg.empty())
{
this->m->bash_argv.push_back(
- PointerHolder<char>(
- true, QUtil::copy_string(arg.c_str())));
+ QUtil::make_shared_cstr(arg));
arg.clear();
}
}
@@ -426,17 +423,17 @@ QPDFArgParser::handleBashArguments()
// This can't happen if properly invoked by bash, but ensure
// we have a valid argv[0] regardless.
this->m->bash_argv.push_back(
- PointerHolder<char>(
- true, QUtil::copy_string(this->m->argv[0])));
+ QUtil::make_shared_cstr(this->m->argv[0]));
}
// Explicitly discard any non-space-terminated word. The "current
// word" is handled specially.
- this->m->bash_argv_ph =
- PointerHolder<char*>(true, new char*[1 + this->m->bash_argv.size()]);
- this->m->argv = this->m->bash_argv_ph.getPointer();
+ this->m->bash_argv_ph = std::shared_ptr<char*>(
+ new char*[1 + this->m->bash_argv.size()],
+ std::default_delete<char*[]>());
+ this->m->argv = this->m->bash_argv_ph.get();
for (size_t i = 0; i < this->m->bash_argv.size(); ++i)
{
- this->m->argv[i] = this->m->bash_argv.at(i).getPointer();
+ this->m->argv[i] = this->m->bash_argv.at(i).get();
}
this->m->argc = QIntC::to_int(this->m->bash_argv.size());
this->m->argv[this->m->argc] = 0;
@@ -467,11 +464,9 @@ QPDFArgParser::readArgsFromFile(char const* filename)
QTC::TC("libtests", "QPDFArgParser read args from file");
lines = QUtil::read_lines_from_file(filename);
}
- for (std::list<std::string>::iterator iter = lines.begin();
- iter != lines.end(); ++iter)
+ for (auto const& line: lines)
{
- this->m->new_argv.push_back(
- PointerHolder<char>(true, QUtil::copy_string((*iter).c_str())));
+ this->m->new_argv.push_back(QUtil::make_shared_cstr(line));
}
}