aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/QPDF.cc11
-rw-r--r--libqpdf/QPDFObjectHandle.cc9
2 files changed, 18 insertions, 2 deletions
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc
index 2658dd26..1807a838 100644
--- a/libqpdf/QPDF.cc
+++ b/libqpdf/QPDF.cc
@@ -2156,6 +2156,17 @@ QPDF::makeIndirectObject(QPDFObjectHandle oh)
}
QPDFObjectHandle
+QPDF::reserveObjectIfNotExists(int objid, int gen)
+{
+ QPDFObjGen og(objid, gen);
+ if ((!this->m->obj_cache.count(og)) && (!this->m->xref_table.count(og))) {
+ resolve(objid, gen);
+ replaceObject(objid, gen, QPDFObjectHandle::Factory::makeReserved());
+ }
+ return getObjectByID(objid, gen);
+}
+
+QPDFObjectHandle
QPDF::getObjectByObjGen(QPDFObjGen const& og)
{
return getObjectByID(og.getObj(), og.getGen());
diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc
index 4a61f595..4a0a69ae 100644
--- a/libqpdf/QPDFObjectHandle.cc
+++ b/libqpdf/QPDFObjectHandle.cc
@@ -2775,14 +2775,19 @@ QPDFObjectHandle::newReserved(QPDF* qpdf)
{
// Reserve a spot for this object by assigning it an object
// number, but then return an unresolved handle to the object.
- QPDFObjectHandle reserved =
- qpdf->makeIndirectObject(QPDFObjectHandle(new QPDF_Reserved()));
+ QPDFObjectHandle reserved = qpdf->makeIndirectObject(makeReserved());
QPDFObjectHandle result =
newIndirect(qpdf, reserved.objid, reserved.generation);
result.reserved = true;
return result;
}
+QPDFObjectHandle
+QPDFObjectHandle::makeReserved()
+{
+ return QPDFObjectHandle(new QPDF_Reserved());
+}
+
void
QPDFObjectHandle::setObjectDescription(
QPDF* owning_qpdf, std::string const& object_description)