diff options
Diffstat (limited to 'gs/base/gdevpdfo.c')
-rw-r--r-- | gs/base/gdevpdfo.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/gs/base/gdevpdfo.c b/gs/base/gdevpdfo.c index 20c3a1d86..be2fae192 100644 --- a/gs/base/gdevpdfo.c +++ b/gs/base/gdevpdfo.c @@ -317,7 +317,7 @@ cos_value_write_spaced(const cos_value_t *pcv, gx_device_pdf *pdev, pprintld1(s, "/R%ld", pcv->contents.object->id); break; case COS_VALUE_OBJECT: { - const cos_object_t *pco = pcv->contents.object; + cos_object_t *pco = pcv->contents.object; if (!pco->id) { if (do_space && @@ -332,6 +332,8 @@ cos_value_write_spaced(const cos_value_t *pcv, gx_device_pdf *pdev, if (do_space) stream_putc(s, ' '); pprintld1(s, "%ld 0 R", pco->id); + if (pco->cos_procs == cos_type_reference) + pco->id = 0; break; } default: /* can't happen */ @@ -397,6 +399,7 @@ static int cos_value_hash(cos_value_t *pcv0, gs_md5_state_t *md5, gs_md5_byte_t /* ------ Generic objects ------ */ +static cos_proc_release(cos_reference_release); static cos_proc_release(cos_generic_release); static cos_proc_write(cos_generic_write); static cos_proc_equal(cos_generic_equal); @@ -404,6 +407,9 @@ static cos_proc_hash(cos_generic_hash); const cos_object_procs_t cos_generic_procs = { cos_generic_release, cos_generic_write, cos_generic_equal, cos_generic_hash }; +const cos_object_procs_t cos_reference_procs = { + cos_reference_release, cos_generic_write, cos_generic_equal, cos_generic_hash +}; cos_object_t * cos_object_alloc(gx_device_pdf *pdev, client_name_t cname) @@ -416,6 +422,23 @@ cos_object_alloc(gx_device_pdf *pdev, client_name_t cname) return pco; } +cos_object_t * +cos_reference_alloc(gx_device_pdf *pdev, client_name_t cname) +{ + gs_memory_t *mem = pdev->pdf_memory; + cos_object_t *pco = + gs_alloc_struct(mem, cos_object_t, &st_cos_object, cname); + + cos_object_init(pco, pdev, &cos_reference_procs); + return pco; +} + +static void +cos_reference_release(cos_object_t *pco, client_name_t cname) +{ + /* Do nothing. */ +} + static void cos_generic_release(cos_object_t *pco, client_name_t cname) { |