aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2023-11-17 19:06:57 +0100
committerm-holger <m-holger@kubitscheck.org>2023-11-26 13:26:44 +0100
commit9f7f9496ed26a5490b9f2b847806282cd1ae1146 (patch)
tree76cfa7d0735f5f43d0f96e0b33e91291626a9eb5 /libqpdf
parent4c71c8680a8aed21e356d23d9828ebb37d052342 (diff)
downloadqpdf-9f7f9496ed26a5490b9f2b847806282cd1ae1146.tar.zst
Add Buffer constructors taking std::string parameters
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/Buffer.cc18
-rw-r--r--libqpdf/Pl_Buffer.cc8
2 files changed, 19 insertions, 7 deletions
diff --git a/libqpdf/Buffer.cc b/libqpdf/Buffer.cc
index 3dddd5db..20453a40 100644
--- a/libqpdf/Buffer.cc
+++ b/libqpdf/Buffer.cc
@@ -27,6 +27,14 @@ Buffer::Members::Members(size_t size, unsigned char* buf, bool own_memory) :
}
}
+Buffer::Members::Members(std::string&& content) :
+ str(std::move(content)),
+ own_memory(false),
+ size(str.size()),
+ buf(reinterpret_cast<unsigned char*>(str.data()))
+{
+}
+
Buffer::Members::~Members()
{
if (this->own_memory) {
@@ -44,11 +52,21 @@ Buffer::Buffer(size_t size) :
{
}
+Buffer::Buffer(std::string&& content) :
+ m(new Members(std::move(content)))
+{
+}
+
Buffer::Buffer(unsigned char* buf, size_t size) :
m(new Members(size, buf, false))
{
}
+Buffer::Buffer(std::string& content) :
+ m(new Members(content.size(), reinterpret_cast<unsigned char*>(content.data()), false))
+{
+}
+
Buffer::Buffer(Buffer const& rhs)
{
assert(test_mode);
diff --git a/libqpdf/Pl_Buffer.cc b/libqpdf/Pl_Buffer.cc
index 05d2ebdb..9994bedd 100644
--- a/libqpdf/Pl_Buffer.cc
+++ b/libqpdf/Pl_Buffer.cc
@@ -42,13 +42,7 @@ Pl_Buffer::getBuffer()
if (!m->ready) {
throw std::logic_error("Pl_Buffer::getBuffer() called when not ready");
}
-
- auto size = m->data.size();
- auto* b = new Buffer(size);
- if (size > 0) {
- unsigned char* p = b->getBuffer();
- memcpy(p, m->data.data(), size);
- }
+ auto* b = new Buffer(std::move(m->data));
m->data.clear();
return b;
}