diff options
author | Thomas Deutschmann <whissi@gentoo.org> | 2020-09-10 18:10:49 +0200 |
---|---|---|
committer | Thomas Deutschmann <whissi@gentoo.org> | 2020-09-11 20:06:36 +0200 |
commit | acfc02c1747065fe450c7cfeb6f1844b62335f08 (patch) | |
tree | 5887806a2e6b99bbb0255e013a9028810e230a7f /base/gdevprn.c | |
parent | Import Ghostscript 9.52 (diff) | |
download | ghostscript-gpl-patches-acfc02c1747065fe450c7cfeb6f1844b62335f08.tar.gz ghostscript-gpl-patches-acfc02c1747065fe450c7cfeb6f1844b62335f08.tar.bz2 ghostscript-gpl-patches-acfc02c1747065fe450c7cfeb6f1844b62335f08.zip |
Import Ghostscript 9.53ghostscript-9.53
Signed-off-by: Thomas Deutschmann <whissi@gentoo.org>
Diffstat (limited to 'base/gdevprn.c')
-rw-r--r-- | base/gdevprn.c | 87 |
1 files changed, 29 insertions, 58 deletions
diff --git a/base/gdevprn.c b/base/gdevprn.c index 9d5c9e9f..9bcc5e50 100644 --- a/base/gdevprn.c +++ b/base/gdevprn.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001-2019 Artifex Software, Inc. +/* Copyright (C) 2001-2020 Artifex Software, Inc. All Rights Reserved. This software is provided AS-IS with no warranty, either express or @@ -37,10 +37,7 @@ /* GC information */ static ENUM_PTRS_WITH(device_printer_enum_ptrs, gx_device_printer *pdev); - if (PRINTER_IS_CLIST(pdev)) - ENUM_PREFIX(st_device_clist, 2); - else - ENUM_PREFIX(st_device_forward, 2); + ENUM_PREFIX(st_device_clist_mutatable, 2); break; case 0:ENUM_RETURN(gx_device_enum_ptr(pdev->parent)); case 1:ENUM_RETURN(gx_device_enum_ptr(pdev->child)); @@ -50,10 +47,7 @@ RELOC_PTRS_WITH(device_printer_reloc_ptrs, gx_device_printer *pdev) { pdev->parent = gx_device_reloc_ptr(pdev->parent, gcst); pdev->child = gx_device_reloc_ptr(pdev->child, gcst); - if (PRINTER_IS_CLIST(pdev)) - RELOC_PREFIX(st_device_clist); - else - RELOC_PREFIX(st_device_forward); + RELOC_PREFIX(st_device_clist_mutatable); } RELOC_PTRS_END public_st_device_printer(); @@ -67,7 +61,7 @@ const gx_device_procs prn_bg_procs = /* Forward references */ int gdev_prn_maybe_realloc_memory(gx_device_printer *pdev, - gdev_prn_space_params *old_space, + gdev_space_params *old_space, int old_width, int old_height, bool old_page_uses_transparency); @@ -222,7 +216,7 @@ gdev_prn_dev_spec_op(gx_device *pdev, int dev_spec_op, void *data, int size) static int /* returns 0 ok, else -ve error cde */ gdev_prn_setup_as_command_list(gx_device *pdev, gs_memory_t *buffer_memory, byte **the_memory, - const gdev_prn_space_params *space_params, + const gdev_space_params *space_params, bool bufferSpace_is_exact) { gx_device_printer * const ppdev = (gx_device_printer *)pdev; @@ -246,7 +240,7 @@ gdev_prn_setup_as_command_list(gx_device *pdev, gs_memory_t *buffer_memory, BEGIN\ ulong *fp_ = (ulong *)&first_arg - 2;\ for (; fp_ && (fp_[1] & 0xff000000) == 0x08000000; fp_ = (ulong *)*fp_)\ - dmprintf2(buffer_memory, " fp=0x%lx ip=0x%lx\n", (ulong)fp_, fp_[1]);\ + dmprintf2(buffer_memory, " fp="PRI_INTPTR" ip=0x%lx\n", (intptr_t)fp_, fp_[1]);\ END dmputs(buffer_memory, "alloc buffer:\n"); BACKTRACE(pdev); @@ -271,7 +265,7 @@ BACKTRACE(pdev); open_c: ppdev->buf = base; ppdev->buffer_space = space; - pclist_dev->common.is_printer = 1; + pclist_dev->common.orig_spec_op = dev_proc(ppdev, dev_spec_op); clist_init_io_procs(pclist_dev, ppdev->BLS_force_memory); clist_init_params(pclist_dev, base, space, target, ppdev->printer_procs.buf_procs, @@ -362,21 +356,21 @@ gdev_prn_tear_down(gx_device *pdev, byte **the_memory) } /* Reset device proc vector to default */ - if (ppdev->orig_procs.open_device != 0) + if (ppdev->orig_procs.open_device != NULL) pdev->procs = ppdev->orig_procs; - ppdev->orig_procs.open_device = 0; /* prevent uninit'd restore of procs */ + ppdev->orig_procs.open_device = NULL; /* prevent uninit'd restore of procs */ return was_command_list; } static int -gdev_prn_allocate(gx_device *pdev, gdev_prn_space_params *new_space_params, +gdev_prn_allocate(gx_device *pdev, gdev_space_params *new_space_params, int new_width, int new_height, bool reallocate) { gx_device_printer * const ppdev = (gx_device_printer *)pdev; gx_device_memory * const pmemdev = (gx_device_memory *)pdev; byte *the_memory = 0; - gdev_prn_space_params save_params = ppdev->space_params; + gdev_space_params save_params = ppdev->space_params; int save_width = 0x0badf00d; /* Quiet compiler */ int save_height = 0x0badf00d; /* Quiet compiler */ bool is_command_list = false; /* Quiet compiler */ @@ -400,7 +394,7 @@ gdev_prn_allocate(gx_device *pdev, gdev_prn_space_params *new_space_params, ulong pdf14_trans_buffer_size = 0; byte *base = 0; bool bufferSpace_is_default = false; - gdev_prn_space_params space_params; + gdev_space_params space_params; gx_device_buf_space_t buf_space; if (reallocate) @@ -520,13 +514,15 @@ gdev_prn_allocate(gx_device *pdev, gdev_prn_space_params *new_space_params, if (ecode == 0) ecode = code; - if ( code >= 0 || (reallocate && pass > 1) ) + if (code >= 0 || (reallocate && pass > 1)) ppdev->procs = gs_clist_device_procs; - /* - * Now the device is a clist device, we enable multi-threaded rendering. - * It will remain enabled, but that doesn't really cause any problems. - */ - clist_enable_multi_thread_render(pdev); + if (code > 0) { + /* + * Now the device is a clist device, we enable multi-threaded rendering. + * It will remain enabled, but that doesn't really cause any problems. + */ + clist_enable_multi_thread_render(pdev); + } } else { /* Render entirely in memory. */ gx_device *bdev = (gx_device *)pmemdev; @@ -598,7 +594,7 @@ gdev_prn_allocate(gx_device *pdev, gdev_prn_space_params *new_space_params, int gdev_prn_allocate_memory(gx_device *pdev, - gdev_prn_space_params *new_space_params, + gdev_space_params *new_space_params, int new_width, int new_height) { return gdev_prn_allocate(pdev, new_space_params, @@ -607,7 +603,7 @@ gdev_prn_allocate_memory(gx_device *pdev, int gdev_prn_reallocate_memory(gx_device *pdev, - gdev_prn_space_params *new_space_params, + gdev_space_params *new_space_params, int new_width, int new_height) { return gdev_prn_allocate(pdev, new_space_params, @@ -795,7 +791,7 @@ gdev_prn_put_params(gx_device * pdev, gs_param_list * plist) int width = pdev->width; int height = pdev->height; int nthreads = ppdev->num_render_threads_requested; - gdev_prn_space_params save_sp; + gdev_space_params save_sp; gs_param_string ofs; gs_param_string bls; gs_param_dict mdict; @@ -1005,7 +1001,7 @@ gdev_prn_put_params(gx_device * pdev, gs_param_list * plist) /* Default routine to (not) override current space_params. */ void gx_default_get_space_params(const gx_device_printer *printer_dev, - gdev_prn_space_params *space_params) + gdev_space_params *space_params) { return; } @@ -1715,11 +1711,11 @@ gdev_prn_copy_scan_lines(gx_device_printer * pdev, int y, byte * str, uint size) count = max(0, min(requested_count, pdev->height - y)); for (i = 0; i < count; i++, dest += line_size) { code = gdev_prn_get_bits(pdev, y + i, dest, NULL); - if (code < 0) + if (code < 0) break; /* will fill remaining lines and return code outside the loop */ } /* fill remaining lines with 0's to prevent printing garbage */ - memset(dest, 0, line_size * (requested_count - i)); + memset(dest, 0, (size_t)line_size * (requested_count - i)); return (code < 0 ) ? code : count; } @@ -1742,35 +1738,10 @@ gdev_prn_close_printer(gx_device * pdev) return 0; } -/* compare two space_params, we can't do this with memcmp since there is padding in the structure */ -static int -compare_gdev_prn_space_params(const gdev_prn_space_params sp1, - const gdev_prn_space_params sp2) { - if (sp1.MaxBitmap != sp2.MaxBitmap) - return(1); - if (sp1.BufferSpace != sp2.BufferSpace) - return(1); - if (sp1.band.BandWidth != sp2.band.BandWidth) - return(1); - if (sp1.band.BandHeight != sp2.band.BandHeight) - return(1); - if (sp1.band.BandBufferSpace != sp2.band.BandBufferSpace) - return(1); - if (sp1.band.tile_cache_size != sp2.band.tile_cache_size) - return(1); - if (sp1.params_are_read_only != sp2.params_are_read_only) - return(1); - if (sp1.banding_type != sp2.banding_type) - return(1); - - return(0); -} - - /* If necessary, free and reallocate the printer memory after changing params */ int gdev_prn_maybe_realloc_memory(gx_device_printer *prdev, - gdev_prn_space_params *old_sp, + gdev_space_params *old_sp, int old_width, int old_height, bool old_page_uses_transparency) { @@ -1787,13 +1758,13 @@ gdev_prn_maybe_realloc_memory(gx_device_printer *prdev, * for these filesets. */ if (prdev->is_open && - (compare_gdev_prn_space_params(prdev->space_params, *old_sp) != 0 || + (gdev_space_params_cmp(prdev->space_params, *old_sp) != 0 || prdev->width != old_width || prdev->height != old_height || prdev->page_uses_transparency != old_page_uses_transparency) ) { int new_width = prdev->width; int new_height = prdev->height; - gdev_prn_space_params new_sp; + gdev_space_params new_sp; #ifdef DEBUGGING_HACKS debug_dump_bytes(pdev->memory, (const byte *)old_sp, (const byte *)(old_sp + 1), "old"); |