aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QUtil.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-01-22 23:33:53 +0100
committerJay Berkenbilt <ejb@ql.org>2022-01-30 19:11:03 +0100
commit76c4f78b5cfd786b90069f7256252229444fdecd (patch)
treeb84a4a401b26fc84846343f28c28a91c35e9fa87 /libqpdf/QUtil.cc
parent67f9d0b7d5857a73c974f5a54cd1abbe65231fce (diff)
downloadqpdf-76c4f78b5cfd786b90069f7256252229444fdecd.tar.zst
Add QUtil::make_shared_cstr
Replace most of the calls to QUtil::copy_string with this instead.
Diffstat (limited to 'libqpdf/QUtil.cc')
-rw-r--r--libqpdf/QUtil.cc14
1 files changed, 13 insertions, 1 deletions
diff --git a/libqpdf/QUtil.cc b/libqpdf/QUtil.cc
index c71e7923..cfd1bb1e 100644
--- a/libqpdf/QUtil.cc
+++ b/libqpdf/QUtil.cc
@@ -731,6 +731,18 @@ QUtil::copy_string(std::string const& str)
return result;
}
+std::shared_ptr<char>
+QUtil::make_shared_cstr(std::string const& str)
+{
+ auto result = std::shared_ptr<char>(
+ new char[str.length() + 1],
+ std::default_delete<char[]>());
+ // Use memcpy in case string contains nulls
+ result.get()[str.length()] = '\0';
+ memcpy(result.get(), str.c_str(), str.length());
+ return result;
+}
+
std::string
QUtil::hex_encode(std::string const& input)
{
@@ -2625,7 +2637,7 @@ QUtil::call_main_from_wmain(int argc, wchar_t* argv[],
QIntC::to_uchar(codepoint & 0xff)));
}
std::string utf8 = QUtil::utf16_to_utf8(utf16);
- utf8_argv.push_back(std::shared_ptr<char>(QUtil::copy_string(utf8.c_str()), std::default_delete<char[]>()));
+ utf8_argv.push_back(QUtil::make_shared_cstr(utf8));
}
auto utf8_argv_sp =
std::shared_ptr<char*>(new char*[1+utf8_argv.size()], std::default_delete<char*[]>());