[gs-commits] ghostpdl branch, master, updated. ghostpdl-9.02-639-g62166be

Ken Sharp ken at ghostscript.com
Fri Oct 7 11:49:25 UTC 2011


The ghostpdl branch, master has been updated
       via  62166be1e0beaa765daf96b77a8e6b1ee99a9b52 (commit)
      from  1225753bd332857b02e546d20bc35d821fd20f58 (commit)

----------------------------------------------------------------------
commit 62166be1e0beaa765daf96b77a8e6b1ee99a9b52
Author: Ken Sharp <ken.sharp at artifex.com>
Date:   Fri Oct 7 12:49:09 2011 +0100

    Remove the 'return' from the macro gx_set_dev_color
    
    Macros shouldn't do a return, its highly surprising to a developer. In addition
    I need access to the return value for pdfwrite, and potentially other
    devices may do so as well. In this case the return value is Remap_color
    which happens when a Pattern is set.
    
    No differences expected in regression tests.

diff --git a/gs/base/gsdps1.c b/gs/base/gsdps1.c
index 5030c21..4e4cae6 100644
--- a/gs/base/gsdps1.c
+++ b/gs/base/gsdps1.c
@@ -201,7 +201,9 @@ gs_rectfill(gs_state * pgs, const gs_rect * pr, uint count)
     /* Processing a fill object operation */
     dev_proc(pgs->device, set_graphics_type_tag)(pgs->device, GS_PATH_TAG);
 
-    gx_set_dev_color(pgs);
+    code = gx_set_dev_color(pgs);
+    if (code != 0)
+        return code;
     if ((is_fzero2(pgs->ctm.xy, pgs->ctm.yx) ||
          is_fzero2(pgs->ctm.xx, pgs->ctm.yy)) &&
         gx_effective_clip_path(pgs, &pcpath) >= 0 &&
diff --git a/gs/base/gsimage.c b/gs/base/gsimage.c
index 8a6a04b..3446a62 100644
--- a/gs/base/gsimage.c
+++ b/gs/base/gsimage.c
@@ -214,7 +214,9 @@ gs_image_begin_typed(const gs_image_common_t * pic, gs_state * pgs,
     dev_proc(pgs->device, set_graphics_type_tag)(pgs->device, GS_IMAGE_TAG);
 
     if (uses_color) {
-        gx_set_dev_color(pgs);
+        code = gx_set_dev_color(pgs);
+        if (code != 0)
+            return code;
         code = gs_state_color_load(pgs);
         if (code < 0)
             return code;
diff --git a/gs/base/gspaint.c b/gs/base/gspaint.c
index 00f3168..dbf7959 100644
--- a/gs/base/gspaint.c
+++ b/gs/base/gspaint.c
@@ -84,7 +84,9 @@ gs_fillpage(gs_state * pgs)
     /* Processing a fill object operation */
     dev_proc(pgs->device, set_graphics_type_tag)(pgs->device, GS_PATH_TAG);
 
-    gx_set_dev_color(pgs);
+    code = gx_set_dev_color(pgs);
+    if (code != 0)
+        return code;
 
     code = (*dev_proc(dev, fillpage))(dev, (gs_imager_state *)pgs,
                                       gs_currentdevicecolor_inline(pgs));
@@ -272,7 +274,9 @@ static int do_fill(gs_state *pgs, int rule)
     else {
         dev_proc(pgs->device, set_graphics_type_tag)(pgs->device, GS_TEXT_TAG);
     }
-    gx_set_dev_color(pgs);
+    code = gx_set_dev_color(pgs);
+    if (code != 0)
+        return code;
     code = gs_state_color_load(pgs);
     if (code < 0)
         return code;
@@ -387,8 +391,9 @@ do_stroke(gs_state * pgs)
     else {
         dev_proc(pgs->device, set_graphics_type_tag)(pgs->device, GS_TEXT_TAG);
     }
-    /* Evil: The following call is a macro that might return! */
-    gx_set_dev_color(pgs);
+    code = gx_set_dev_color(pgs);
+    if (code != 0)
+        return code;
     code = gs_state_color_load(pgs);
     if (code < 0)
         return code;
diff --git a/gs/base/gstext.c b/gs/base/gstext.c
index 9df9bc6..efb63d5 100644
--- a/gs/base/gstext.c
+++ b/gs/base/gstext.c
@@ -260,7 +260,9 @@ gs_text_begin(gs_state * pgs, const gs_text_params_t * text,
     /* Processing a text object operation */
     dev_proc(pgs->device, set_graphics_type_tag)(pgs->device, GS_TEXT_TAG);
 
-    gx_set_dev_color(pgs);
+    code = gx_set_dev_color(pgs);
+    if (code != 0)
+        return code;
     code = gs_state_color_load(pgs);
     if (code < 0)
         return code;
@@ -289,8 +291,11 @@ gs_text_update_dev_color(gs_state * pgs, gs_text_enum_t * pte)
     /* Processing a text object operation */
     dev_proc(pgs->device, set_graphics_type_tag)(pgs->device, GS_TEXT_TAG);
 
-    if (pte->pdcolor != 0)
-        gx_set_dev_color(pgs);
+    if (pte->pdcolor != 0) {
+        int code = gx_set_dev_color(pgs);
+        if (code != 0)
+            return code;
+    }
     return 0;
 }
 
diff --git a/gs/base/gxccache.c b/gs/base/gxccache.c
index 3a64a8e..30fb418 100644
--- a/gs/base/gxccache.c
+++ b/gs/base/gxccache.c
@@ -233,7 +233,9 @@ gx_image_cached_char(register gs_show_enum * penum, register cached_char * cc)
         imaging_dev = (gx_device *) & cdev;
         if_debug0('K', "[K](clipping)\n");
     }
-    gx_set_dev_color(pgs);
+    code = gx_set_dev_color(pgs);
+    if (code != 0)
+        return code;
     /* If an xfont can render this character, use it. */
     if (xg != gx_no_xglyph && (xf = cc_pair(cc)->xfont) != 0) {
         int cx = x + fixed2int(cc->offset.x);
diff --git a/gs/base/gxdcolor.h b/gs/base/gxdcolor.h
index 0b53e18..7e424f3 100644
--- a/gs/base/gxdcolor.h
+++ b/gs/base/gxdcolor.h
@@ -300,10 +300,8 @@ void gx_set_device_color_1(gs_state * pgs);
 int gx_remap_color(gs_state *);
 
 #define gx_set_dev_color(pgs)\
-  if ( !color_is_set(gs_currentdevicecolor_inline(pgs)) )\
-   { int code_dc = gx_remap_color(pgs);\
-     if ( code_dc != 0 ) return code_dc;\
-   }
+    color_is_set(gs_currentdevicecolor_inline(pgs)) ? 0 :\
+      gx_remap_color(pgs);
 
 /* Indicate that the device color needs remapping. */
 #define gx_unset_dev_color(pgs)\
diff --git a/pl/plchar.c b/pl/plchar.c
index 58c7093..b7c42d6 100644
--- a/pl/plchar.c
+++ b/pl/plchar.c
@@ -278,7 +278,9 @@ image_bitmap_char(gs_image_enum *ienum, const gs_image_t *pim,
         const byte *planes[1];
         int code;
 
-        gx_set_dev_color(pgs);
+        code = gx_set_dev_color(pgs);
+        if (code != 0)
+            return code;
         code = (*dev_proc(dev, begin_image))
           (dev, (const gs_imager_state *)pgs, pim, gs_image_format_chunky,
            NULL, gs_currentdevicecolor_inline(pgs), pgs->clip_path,
diff --git a/pl/pldraw.c b/pl/pldraw.c
index 61dd6bc..a732ee4 100644
--- a/pl/pldraw.c
+++ b/pl/pldraw.c
@@ -33,8 +33,11 @@ pl_begin_image(gs_state *pgs, const gs_image_t *pim,
 {	
     gx_device *dev = pgs->device;
 
-    if ( pim->ImageMask | pim->CombineWithColor )
-        gx_set_dev_color(pgs);
+    if ( pim->ImageMask | pim->CombineWithColor ) {
+        int code = gx_set_dev_color(pgs);
+        if (code != 0)
+            return code;
+    }
     return (*dev_proc(dev, begin_image))
         (dev, (const gs_imager_state *)pgs, pim,
          gs_image_format_chunky, (const gs_int_rect *)0,


Summary of changes:
 gs/base/gsdps1.c   |    4 +++-
 gs/base/gsimage.c  |    4 +++-
 gs/base/gspaint.c  |   13 +++++++++----
 gs/base/gstext.c   |   11 ++++++++---
 gs/base/gxccache.c |    4 +++-
 gs/base/gxdcolor.h |    6 ++----
 pl/plchar.c        |    4 +++-
 pl/pldraw.c        |    7 +++++--
 8 files changed, 36 insertions(+), 17 deletions(-)



More information about the gs-commits mailing list