ports/135931: ghostscript-8.64 produces empty output for -sDEVICE=bitrgb
Uwe Krüger
uwe_debbug at arcor.de
Mon Jun 22 19:50:02 UTC 2009
>Number: 135931
>Category: ports
>Synopsis: ghostscript-8.64 produces empty output for -sDEVICE=bitrgb
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Mon Jun 22 19:50:02 UTC 2009
>Closed-Date:
>Last-Modified:
>Originator: Uwe Krüger
>Release: 8.0-CURRENT-200906
>Organization:
>Environment:
FreeBSD asus.localdomain 8.0-CURRENT-200906 FreeBSD 8.0-CURRENT-200906 #0: Sat Jun 20 01:22:24 CEST 2009 root at eeepc.localdomain:/usr/obj/usr/src/sys/UWE i386
>Description:
Trying to create a bitrgb-file from a postscript file results in a zero size file. Other bit* devices may also be affected.
>How-To-Repeat:
gs -sDEVICE=bitrgb -DNOPAUSE -dBATCH -sOutputFile=xy.rgb /usr/local/share/ghostscript/8.64/examples/tiger.eps
The size of the file xy.rgb is 0.
>Fix:
The following patch (from mainstream SVN via Debian) fixes the problem
Patch attached with submission follows:
--- base/gdevbit.c.orig
+++ base/gdevbit.c
@@ -653,7 +653,7 @@ bit_put_params(gx_device * pdev, gs_param_list * plist)
pdev->color_info.depth == 32 ? cmyk_8bit_map_cmyk_color :
bit_map_cmyk_color);
}
- /* Reset the sparable and linear shift, masks, bits. */
+ /* Reset the separable and linear shift, masks, bits. */
set_linear_color_bits_mask_shift(pdev);
pdev->color_info.separable_and_linear = GX_CINFO_SEP_LIN;
((gx_device_bit *)pdev)->FirstLine = FirstLine;
@@ -671,16 +671,18 @@ bit_print_page(gx_device_printer * pdev, FILE * prn_stream)
byte *in = gs_alloc_bytes(pdev->memory, line_size, "bit_print_page(in)");
byte *data;
int nul = !strcmp(pdev->fname, "nul") || !strcmp(pdev->fname, "/dev/null");
- int lnum = ((gx_device_bit *)pdev)->FirstLine;
- int bottom = ((gx_device_bit *)pdev)->LastLine;
+ int lnum = ((gx_device_bit *)pdev)->FirstLine >= pdev->height ? pdev->height - 1 :
+ ((gx_device_bit *)pdev)->FirstLine;
+ int bottom = ((gx_device_bit *)pdev)->LastLine >= pdev->height ? pdev->height - 1 :
+ ((gx_device_bit *)pdev)->LastLine;
int line_count = any_abs(bottom - lnum);
int i, step = lnum > bottom ? -1 : 1;
if (in == 0)
return_error(gs_error_VMerror);
if ((lnum == 0) && (bottom == 0))
- bottom = pdev->height - 1;
- for (i = 0; i < line_count; i++, lnum += step) {
+ line_count = pdev->height - 1; /* default when LastLine == 0, FirstLine == 0 */
+ for (i = 0; i <= line_count; i++, lnum += step) {
gdev_prn_get_bits(pdev, lnum, in, &data);
if (!nul)
fwrite(data, 1, line_size, prn_stream);
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list