[gs-code-review] Partial fix for CET 12-14a

Igor V. Melichev igor.melichev at artifex.com
Mon Oct 30 06:32:40 PST 2006


Alex,

I approve the patch.
Could you please also replace 'foo' with a better identifier ?
Please commit with that.

Igor.

----- Original Message ----- 
From: "Alex Cherepanov" <alexcher at quadnet.net>
To: "gs-code-review" <gs-code-review at ghostscript.com>
Sent: Saturday, October 28, 2006 5:27 PM
Subject: [gs-code-review] Partial fix for CET 12-14a


> Fix decoding of the indexed color space in the smooth shading.
> Adjust error codes to match CET 12-14a.ps and CPSI 3017.
> Change gs_errorinfo_put_pair() to take char* instead of byte* a
> more common type.
>
> DIFFERENCES:
> None
>
>


--------------------------------------------------------------------------------


> Index: gs/src/int.mak
> ===================================================================
> --- gs/src/int.mak (revision 7132)
> +++ gs/src/int.mak (working copy)
> @@ -1755,7 +1755,7 @@
>  $(gscolor2_h) $(gscolor3_h) $(gscspace_h) $(gsfunc3_h)\
>  $(gsptype2_h) $(gsshade_h) $(gsstruct_h) $(gsuid_h)\
>  $(stream_h)\
> - $(files_h)\
> + $(files_h) $(interp_h)\
>  $(ialloc_h) $(idict_h) $(idparam_h) $(ifunc_h) $(igstate_h) $(ipcolor_h)\
>  $(store_h)
>  $(PSCC) $(PSO_)zshade.$(OBJ) $(C_) $(PSSRC)zshade.c
> Index: gs/src/zshade.c
> ===================================================================
> --- gs/src/zshade.c (revision 7132)
> +++ gs/src/zshade.c (working copy)
> @@ -31,6 +31,7 @@
> #include "idparam.h"
> #include "ifunc.h"
> #include "igstate.h"
> +#include "interp.h"             /* for gs_errorinfo_put_pair() */
> #include "ipcolor.h"
> #include "store.h"
>
> @@ -289,9 +290,15 @@
>  * Adobe interpreters follow PLRM in this respect and we follow them.
>  */
> private int
> -check_indexed_vs_function(const gs_color_space *pcs, const gs_function_t 
> *foo)
> -{ if (foo && gs_color_space_get_index(pcs) == 
> gs_color_space_index_Indexed)
> -    return_error(e_rangecheck);
> +check_indexed_vs_function(i_ctx_t *i_ctx_p, const ref *op,
> +                          const gs_color_space *pcs, const gs_function_t 
> *foo)
> +{ if (foo && gs_color_space_get_index(pcs) == 
> gs_color_space_index_Indexed) {
> +    static const char fn[] = "Function";
> +    ref *f;
> +    if (dict_find_string(op, fn, &f) > 0)
> +        gs_errorinfo_put_pair(i_ctx_p, fn, sizeof(fn) - 1, f);
> +    return_error(e_typecheck);  /* CET 12-14a */
> +  }
>   return 0;
> }
>
> @@ -316,7 +323,7 @@
>  (dict_find_string(op, "Matrix", &pmatrix) > 0 &&
>  (code = read_matrix(imemory, pmatrix, &params.Matrix)) < 0) ||
>  (code = build_shading_function(i_ctx_p, op, &params.Function, 2, mem)) < 
> 0 ||
> - (code = check_indexed_vs_function(params.ColorSpace, params.Function)) < 
> 0 ||
> + (code = check_indexed_vs_function(i_ctx_p, op, params.ColorSpace, 
> params.Function)) < 0 ||
>  (code = gs_shading_Fb_init(ppsh, &params, mem)) < 0
>  ) {
>  gs_free_object(mem, params.Function, "Function");
> @@ -385,7 +392,7 @@
>     if ((code = build_directional_shading(i_ctx_p, op, params.Coords, 4,
>    params.Domain, &params.Function,
>    params.Extend, mem)) < 0 ||
> - (code = check_indexed_vs_function(params.ColorSpace, params.Function)) < 
> 0 ||
> + (code = check_indexed_vs_function(i_ctx_p, op, params.ColorSpace, 
> params.Function)) < 0 ||
>  (code = gs_shading_A_init(ppsh, &params, mem)) < 0
>  ) {
>  gs_free_object(mem, params.Function, "Function");
> @@ -411,7 +418,7 @@
>     if ((code = build_directional_shading(i_ctx_p, op, params.Coords, 6,
>    params.Domain, &params.Function,
>    params.Extend, mem)) < 0 ||
> - (code = check_indexed_vs_function(params.ColorSpace, params.Function)) < 
> 0 ||
> + (code = check_indexed_vs_function(i_ctx_p, op, params.ColorSpace, 
> params.Function)) < 0 ||
>  (code = gs_shading_R_init(ppsh, &params, mem)) < 0
>  ) {
>  gs_free_object(mem, params.Function, "Function");
> @@ -540,7 +547,7 @@
>     if ((code =
>  build_mesh_shading(i_ctx_p, op, (gs_shading_mesh_params_t *)&params,
>      &params.Decode, &params.Function, mem)) < 0 ||
> - (code = check_indexed_vs_function(params.ColorSpace, params.Function)) < 
> 0 ||
> + (code = check_indexed_vs_function(i_ctx_p, op, params.ColorSpace, 
> params.Function)) < 0 ||
>  (code = flag_bits_param(op, (gs_shading_mesh_params_t *)&params,
>  &params.BitsPerFlag)) < 0 ||
>  (code = gs_shading_FfGt_init(ppsh, &params, mem)) < 0
> @@ -569,7 +576,7 @@
>     if ((code =
>  build_mesh_shading(i_ctx_p, op, (gs_shading_mesh_params_t *)&params,
>      &params.Decode, &params.Function, mem)) < 0 ||
> - (code = check_indexed_vs_function(params.ColorSpace, params.Function)) < 
> 0 ||
> + (code = check_indexed_vs_function(i_ctx_p, op, params.ColorSpace, 
> params.Function)) < 0 ||
>  (code = dict_int_param(op, "VerticesPerRow", 2, max_int, 0,
>         &params.VerticesPerRow)) < 0 ||
>  (code = gs_shading_LfGt_init(ppsh, &params, mem)) < 0
> @@ -598,7 +605,7 @@
>     if ((code =
>  build_mesh_shading(i_ctx_p, op, (gs_shading_mesh_params_t *)&params,
>      &params.Decode, &params.Function, mem)) < 0 ||
> - (code = check_indexed_vs_function(params.ColorSpace, params.Function)) < 
> 0 ||
> + (code = check_indexed_vs_function(i_ctx_p, op, params.ColorSpace, 
> params.Function)) < 0 ||
>  (code = flag_bits_param(op, (gs_shading_mesh_params_t *)&params,
>  &params.BitsPerFlag)) < 0 ||
>  (code = gs_shading_Cp_init(ppsh, &params, mem)) < 0
> @@ -627,7 +634,7 @@
>     if ((code =
>  build_mesh_shading(i_ctx_p, op, (gs_shading_mesh_params_t *)&params,
>      &params.Decode, &params.Function, mem)) < 0 ||
> - (code = check_indexed_vs_function(params.ColorSpace, params.Function)) < 
> 0 ||
> + (code = check_indexed_vs_function(i_ctx_p, op, params.ColorSpace, 
> params.Function)) < 0 ||
>  (code = flag_bits_param(op, (gs_shading_mesh_params_t *)&params,
>  &params.BitsPerFlag)) < 0 ||
>  (code = gs_shading_Tpp_init(ppsh, &params, mem)) < 0
> Index: gs/src/zimage.c
> ===================================================================
> --- gs/src/zimage.c (revision 7132)
> +++ gs/src/zimage.c (working copy)
> @@ -298,7 +298,7 @@
>  break;
>      default:
>  if (!r_is_proc(sources)) {
> -        static const byte ds[] = "DataSource";
> +        static const char ds[] = "DataSource";
>                     if (pie != NULL)
>                         gx_image_end(pie, false);    /* Clean up pie */
>                     gs_errorinfo_put_pair(i_ctx_p, ds, sizeof(ds) - 1, 
> pp);
> Index: gs/src/interp.c
> ===================================================================
> --- gs/src/interp.c (revision 7132)
> +++ gs/src/interp.c (working copy)
> @@ -729,12 +729,12 @@
> /* The key must be a permanently allocated C string. */
> /* This routine is here because of the proximity to the error handler. */
> int
> -gs_errorinfo_put_pair(i_ctx_t *i_ctx_p, const byte *key, int len, const 
> ref *any)
> +gs_errorinfo_put_pair(i_ctx_t *i_ctx_p, const char *key, int len, const 
> ref *any)
> {
>     int code;
>     ref pair, *aptr, key_name, *pderror;
>
> -    code = name_ref(imemory_local, key, len, &key_name, 0);
> +    code = name_ref(imemory_local, (const byte *)key, len, &key_name, 0);
>     if (code < 0)
>         return code;
>     code = gs_alloc_ref_array(iimemory_local, &pair, a_readonly, 2, 
> "gs_errorinfo_put_pair");
> Index: gs/src/interp.h
> ===================================================================
> --- gs/src/interp.h (revision 7132)
> +++ gs/src/interp.h (working copy)
> @@ -63,7 +63,7 @@
>
> /* Create and store [/key any] array in $error /errorinfo. */
> /* The key must be a permanently allocated C string. */
> -int gs_errorinfo_put_pair(i_ctx_t *, const byte *key, int len, const ref 
> *any);
> +int gs_errorinfo_put_pair(i_ctx_t *, const char *key, int len, const ref 
> *any);
>
> /* Initialize the interpreter. */
> int gs_interp_init(i_ctx_t **pi_ctx_p, const ref *psystem_dict,
> Index: gs/src/gxshade.c
> ===================================================================
> --- gs/src/gxshade.c (revision 7132)
> +++ gs/src/gxshade.c (working copy)
> @@ -241,16 +241,20 @@
>
>     if (index == gs_color_space_index_Indexed) {
>  int ncomp = gs_color_space_num_components(gs_cspace_base_space(pcs));
> - uint ci;
> - int code = cs->get_value(cs, num_bits, &ci);
> - gs_client_color cc;
> + int ci;
> +        float cf;
> + int code = cs->get_decoded(cs, num_bits, decode, &cf);
> +        gs_client_color cc;
>  int i;
>
>  if (code < 0)
>      return code;
> - if (ci >= gs_cspace_indexed_num_entries(pcs))
> + if (cf < 0)
>      return_error(gs_error_rangecheck);
> - code = gs_cspace_indexed_lookup(&pcs->params.indexed, (int)ci, &cc);
> + ci = (int)cf;
> +        if (ci >= gs_cspace_indexed_num_entries(pcs))
> +     return_error(gs_error_rangecheck);
> + code = gs_cspace_indexed_lookup(&pcs->params.indexed, ci, &cc);
>  if (code < 0)
>      return code;
>  for (i = 0; i < ncomp; ++i)
>


--------------------------------------------------------------------------------


> _______________________________________________
> gs-code-review mailing list
> gs-code-review at ghostscript.com
> http://www.ghostscript.com/mailman/listinfo/gs-code-review
> 



More information about the gs-code-review mailing list