static void prepare_object_for_alteration(fz_context *ctx, pdf_obj *obj, pdf_obj *val) { pdf_document *doc, *val_doc; int parent; /* obj should be a dict or an array. We don't care about any other types, as they aren't 'containers'. */ if (obj < PDF_OBJ__LIMIT) return; switch (obj->kind) { case PDF_DICT: doc = DICT(obj)->doc; parent = DICT(obj)->parent_num; break; case PDF_ARRAY: doc = ARRAY(obj)->doc; parent = ARRAY(obj)->parent_num; break; default: return; } if (val) { val_doc = pdf_get_bound_document(ctx, val); if (doc && val_doc && val_doc != doc) fz_throw(ctx, FZ_ERROR_GENERIC, "container and item belong to different documents"); } /* parent_num = 0 while an object is being parsed from the file. No further action is necessary. */ if (parent == 0 || doc->freeze_updates) return; /* Otherwise we need to ensure that the containing hierarchy of objects has been moved to the incremental xref section and the newly linked object needs to record the parent_num */ pdf_xref_ensure_incremental_object(ctx, doc, parent); pdf_set_obj_parent(ctx, val, parent); }
static void object_altered(fz_context *ctx, pdf_obj *obj, pdf_obj *val) { pdf_document *doc = obj->doc; /* parent_num = 0 while an object is being parsed from the file. No further action is necessary. */ if (obj->parent_num == 0 || doc->freeze_updates) return; /* Otherwise we need to ensure that the containing hierarchy of objects has been moved to the incremental xref section and the newly linked object needs to record the parent_num */ pdf_xref_ensure_incremental_object(ctx, doc, obj->parent_num); pdf_set_obj_parent(ctx, val, obj->parent_num); }