summaryrefslogtreecommitdiff
path: root/patches/source/ghostscript/ghostscript.fix_black_page.diff
blob: afcbf473c870f1c48b5e63093b6b659d2413117f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
From 6d26e9b1c38d8c0f0ab4af42c513cb23f3ae1656 Mon Sep 17 00:00:00 2001
From: till <till@a1074d23-0009-0410-80fe-cf8c14f379e6>
Date: Tue, 9 Mar 2010 16:35:06 +0000
Subject: [PATCH] Fixes on CUPS Raster output device:
 - Fixed memory reallocation on bitmap size change. Reallocation is not only
   needed when dimendions and margins change, but also when the color depth
   changes. Fixes bugs #691029 and #691108.
 - Fixed arrayoption() macro in cups_put_params() function. Array values did
   not get actually set in cups.header data structure. Bug only showed via
   a compiler warning.
 - Silenced compiler warning by presetting c0..c3 in cups_map_cmyk() to zero.

git-svn-id: http://svn.ghostscript.com/ghostscript/trunk/gs@10890 a1074d23-0009-0410-80fe-cf8c14f379e6
---
 cups/gdevcups.c |   32 +++++++++++++++++++++++---------
 1 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/cups/gdevcups.c b/cups/gdevcups.c
index 551b806..4000abf 100644
--- a/cups/gdevcups.c
+++ b/cups/gdevcups.c
@@ -975,7 +975,8 @@ cups_map_cmyk(gx_device *pdev,		/* I - Device info */
 	      frac      k,		/* I - Black value */
 	      frac      *out)		/* O - Device colors */
 {
-  int	c0, c1, c2, c3;			/* Temporary color values */
+  int	c0 = 0, c1 = 0,
+        c2 = 0, c3 = 0;			/* Temporary color values */
   float	rr, rg, rb,			/* Real RGB colors */
 	ciex, ciey, ciez,		/* CIE XYZ colors */
 	ciey_yn,			/* Normalized luminance */
@@ -2703,9 +2704,13 @@ cups_put_params(gx_device     *pdev,	/* I - Device info */
   int			color_set;	/* Were the color attrs set? */
   gdev_prn_space_params	sp;		/* Space parameter data */
   int			width,		/* New width of page */
-                        height;		/* New height of page */
+                        height,		/* New height of page */
+                        colorspace,     /* New color space */
+                        bitspercolor;   /* New bits per color */
   static int            width_old = 0,  /* Previous width */
-                        height_old = 0; /* Previous height */
+                        height_old = 0, /* Previous height */
+                        colorspace_old = 0,/* Previous color space */
+                        bitspercolor_old = 0;/* Previous bits per color */
   ppd_attr_t            *backside = NULL,
                         *backsiderequiresflippedmargins = NULL;
   float                 swap;
@@ -2800,9 +2805,10 @@ cups_put_params(gx_device     *pdev,	/* I - Device info */
   else if (code == 0) \
   { \
     dprintf1("DEBUG: Setting %s to", sname); \
-    for (i = 0; i < count; i ++) \
-      dprintf1(" %d", (unsigned)(arrayval.data[i]));	 \
-      cups->header.name[i] = (unsigned)arrayval.data[i]; \
+    for (i = 0; i < count; i ++) { \
+      dprintf1(" %d", (unsigned)(arrayval.data[i])); \
+      cups->header.name[i] = (unsigned)(arrayval.data[i]); \
+    } \
     dprintf("...\n"); \
   }
 
@@ -3243,23 +3249,31 @@ cups_put_params(gx_device     *pdev,	/* I - Device info */
     }
 #endif /* CUPS_RASTER_SYNCv1 */
 
+    colorspace = cups->header.cupsColorSpace;
+    bitspercolor = cups->header.cupsBitsPerColor;
+
    /*
     * Don't reallocate memory unless the device has been opened...
     * Also reallocate only if the size has actually changed...
     */
 
-    if (pdev->is_open && (width != width_old || height != height_old))
+    if (pdev->is_open &&
+	(width != width_old || height != height_old ||
+	 colorspace != colorspace_old || bitspercolor != bitspercolor_old))
     {
 
       width_old = width;
       height_old = height;
+      colorspace_old = colorspace;
+      bitspercolor_old = bitspercolor;
 
      /*
       * Device is open and size has changed, so reallocate...
       */
 
-      dprintf4("DEBUG2: Reallocating memory, [%.0f %.0f] = %dx%d pixels...\n",
-	       pdev->MediaSize[0], pdev->MediaSize[1], width, height);
+      dprintf6("DEBUG2: Reallocating memory, [%.0f %.0f] = %dx%d pixels, color space: %d, bits per color: %d...\n",
+	       pdev->MediaSize[0], pdev->MediaSize[1], width, height,
+	       colorspace, bitspercolor);
 
       sp = ((gx_device_printer *)pdev)->space_params;
 
-- 
1.6.6.1