aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2021-12-02 17:47:04 +0100
committerJay Berkenbilt <jberkenbilt@users.noreply.github.com>2021-12-02 19:59:58 +0100
commitb4fc9eb700672b35b023e0ff4d43e3c6ba39bf20 (patch)
treed1c2ed28960e7e6de39252b0f426f37cb4bfebe1
parent720ce9e8f333ba3911fa8003f08fd8813c19181a (diff)
downloadqpdf-b4fc9eb700672b35b023e0ff4d43e3c6ba39bf20.tar.zst
C-API expose new_object as qpdf_oh_new_object
-rw-r--r--include/qpdf/qpdf-c.h4
-rw-r--r--libqpdf/qpdf-c.cc6
-rw-r--r--qpdf/qpdf-ctest.c5
-rw-r--r--qpdf/qpdf.testcov1
4 files changed, 16 insertions, 0 deletions
diff --git a/include/qpdf/qpdf-c.h b/include/qpdf/qpdf-c.h
index 886e521f..94338837 100644
--- a/include/qpdf/qpdf-c.h
+++ b/include/qpdf/qpdf-c.h
@@ -554,6 +554,10 @@ extern "C" {
QPDF_DLL
void qpdf_oh_release_all(qpdf_data data);
+ /* Clone an object handle */
+ QPDF_DLL
+ qpdf_oh qpdf_oh_new_object(qpdf_data qpdf, qpdf_oh oh);
+
/* Get trailer and root objects */
QPDF_DLL
qpdf_oh qpdf_get_trailer(qpdf_data data);
diff --git a/libqpdf/qpdf-c.cc b/libqpdf/qpdf-c.cc
index 08d4471b..fa6d46d6 100644
--- a/libqpdf/qpdf-c.cc
+++ b/libqpdf/qpdf-c.cc
@@ -841,6 +841,12 @@ new_object(qpdf_data qpdf, QPDFObjectHandle const& qoh)
return oh;
}
+qpdf_oh qpdf_oh_new_object(qpdf_data qpdf, qpdf_oh oh)
+{
+ QTC::TC("qpdf", "qpdf-c called qpdf_new_object");
+ return new_object(qpdf, *(qpdf->oh_cache[oh]));
+}
+
void qpdf_oh_release(qpdf_data qpdf, qpdf_oh oh)
{
QTC::TC("qpdf", "qpdf-c called qpdf_oh_release");
diff --git a/qpdf/qpdf-ctest.c b/qpdf/qpdf-ctest.c
index 9557d522..f5160f84 100644
--- a/qpdf/qpdf-ctest.c
+++ b/qpdf/qpdf-ctest.c
@@ -531,14 +531,19 @@ static void test24(char const* infile,
assert(qpdf_oh_is_array(qpdf, mediabox));
assert(qpdf_oh_get_array_n_items(qpdf, mediabox) == 4);
qpdf_oh wrapped_mediabox = qpdf_oh_wrap_in_array(qpdf, mediabox);
+ qpdf_oh cloned_mediabox = qpdf_oh_new_object(qpdf, mediabox);
assert(wrapped_mediabox != mediabox);
+ assert(cloned_mediabox != mediabox);
assert(qpdf_oh_get_array_n_items(qpdf, wrapped_mediabox) == 4);
for (int i = 0; i < 4; ++i)
{
qpdf_oh item = qpdf_oh_get_array_item(qpdf, mediabox, i);
qpdf_oh item2 = qpdf_oh_get_array_item(qpdf, wrapped_mediabox, i);
+ qpdf_oh item3 = qpdf_oh_get_array_item(qpdf, cloned_mediabox, i);
assert(qpdf_oh_get_int_value_as_int(qpdf, item) ==
qpdf_oh_get_int_value_as_int(qpdf, item2));
+ assert(qpdf_oh_get_int_value_as_int(qpdf, item) ==
+ qpdf_oh_get_int_value_as_int(qpdf, item3));
printf("item %d: %d %.2f\n",
i, qpdf_oh_get_int_value_as_int(qpdf, item),
qpdf_oh_get_numeric_value(qpdf, item));
diff --git a/qpdf/qpdf.testcov b/qpdf/qpdf.testcov
index 8b04c04f..277bf8df 100644
--- a/qpdf/qpdf.testcov
+++ b/qpdf/qpdf.testcov
@@ -458,6 +458,7 @@ qpdf pages range omitted with . 0
qpdf-c invalid object handle 0
qpdf-c called qpdf_oh_release 0
qpdf-c called qpdf_oh_release_all 0
+qpdf-c called qpdf_new_object 0
qpdf-c called qpdf_get_trailer 0
qpdf-c called qpdf_get_root 0
qpdf-c called qpdf_oh_is_bool 0