diff options
author | Ken Sharp <ken.sharp@artifex.com> | 2019-05-07 12:52:25 +0100 |
---|---|---|
committer | Ken Sharp <ken.sharp@artifex.com> | 2019-05-08 15:27:28 +0100 |
commit | 0d75869134c69963406500b536fb1bb1c97c8621 (patch) | |
tree | 23c9014d895b88f15b0cf0fa7d18622492a1bf31 /base | |
parent | 97253bf54a701d5e433378df953e066d009afde0 (diff) | |
download | ghostpdl-0d75869134c69963406500b536fb1bb1c97c8621.tar.gz |
Separation - change ink name to be a C string instead of name index
As indicated in previous commits, change the stored ink name in the
colour space structure params.separation from a numeric value
(gs_separation_name) into a C string.
We never have to pass these back to the interpreter, so we allocate the
storage using the non-GC allocater.
Diffstat (limited to 'base')
-rw-r--r-- | base/gscdevn.c | 10 | ||||
-rw-r--r-- | base/gscsepr.c | 17 | ||||
-rw-r--r-- | base/gscspace.h | 4 | ||||
-rw-r--r-- | base/gsequivc.c | 5 | ||||
-rw-r--r-- | base/gsicc_cache.c | 8 | ||||
-rw-r--r-- | base/gxcmap.c | 7 |
6 files changed, 23 insertions, 28 deletions
diff --git a/base/gscdevn.c b/base/gscdevn.c index 8b65f5a93..993f7f26b 100644 --- a/base/gscdevn.c +++ b/base/gscdevn.c @@ -805,7 +805,7 @@ static int gx_serialize_DeviceN(const gs_color_space * pcs, stream * s) { const gs_device_n_params * p = &pcs->params.device_n; - uint n; + uint n, m; int code = gx_serialize_cspace_type(pcs, s); if (code < 0) @@ -813,9 +813,11 @@ gx_serialize_DeviceN(const gs_color_space * pcs, stream * s) code = sputs(s, (const byte *)&p->num_components, sizeof(p->num_components), &n); if (code < 0) return code; - code = sputs(s, (const byte *)&p->names[0], sizeof(p->names[0]) * p->num_components, &n); - if (code < 0) - return code; + for (n=0;n < p->num_components;n++) { + code = sputs(s, (const byte *)p->names[n], strlen(p->names[n]) + 1, &m); + if (code < 0) + return code; + } code = cs_serialize(pcs->base_space, s); if (code < 0) return code; diff --git a/base/gscsepr.c b/base/gscsepr.c index d5453c130..5ed9ef22f 100644 --- a/base/gscsepr.c +++ b/base/gscsepr.c @@ -71,7 +71,6 @@ const gs_color_space_type gs_color_space_type_Separation = { static ENUM_PTRS_BEGIN(cs_Separation_enum_ptrs) return 0; ENUM_PTR(0, gs_color_space, params.separation.map); - case 1 : return ENUM_NAME_INDEX_ELT(gs_color_space, params.separation.sep_name); ENUM_PTRS_END static RELOC_PTRS_BEGIN(cs_Separation_reloc_ptrs) { @@ -120,11 +119,8 @@ check_Separation_component_name(const gs_color_space * pcs, gs_gstate * pgs); static separation_colors gx_check_process_names_Separation(gs_color_space * pcs, gs_gstate * pgs) { - const gs_separation_name name = pcs->params.separation.sep_name; - byte *pname; - uint name_size; - - pcs->params.separation.get_colorname_string(pgs->memory, name, &pname, &name_size); + byte *pname = (byte *)pcs->params.separation.sep_name; + uint name_size = strlen(pcs->params.separation.sep_name); /* Classify */ if (strncmp((char *)pname, "None", name_size) == 0 || @@ -219,6 +215,7 @@ gx_final_Separation(const gs_color_space * pcs) { rc_adjust_const(pcs->params.separation.map, -1, "gx_adjust_Separation"); + gs_free_object(pcs->params.separation.mem, pcs->params.separation.sep_name, "gx_final_Separation"); } /* ------ Constructors/accessors ------ */ @@ -445,9 +442,8 @@ gx_remap_concrete_Separation(const gs_color_space * pcs, const frac * pconc, static int check_Separation_component_name(const gs_color_space * pcs, gs_gstate * pgs) { - const gs_separation_name name = pcs->params.separation.sep_name; int colorant_number; - byte * pname; + byte *pname; uint name_size; gs_devicen_color_map * pcolor_component_map = &pgs->color_component_map; @@ -485,7 +481,8 @@ check_Separation_component_name(const gs_color_space * pcs, gs_gstate * pgs) /* * Get the character string and length for the component name. */ - pcs->params.separation.get_colorname_string(dev->memory, name, &pname, &name_size); + pname = (byte *)pcs->params.separation.sep_name; + name_size = strlen(pcs->params.separation.sep_name); /* * Compare the colorant name to the device's. If the device's * compare routine returns GX_DEVICE_COLOR_MAX_COMPONENTS then the @@ -549,7 +546,7 @@ gx_serialize_Separation(const gs_color_space * pcs, stream * s) if (code < 0) return code; - code = sputs(s, (const byte *)&p->sep_name, sizeof(p->sep_name), &n); + code = sputs(s, (const byte *)&p->sep_name, strlen(p->sep_name) + 1, &n); if (code < 0) return code; code = cs_serialize(pcs->base_space, s); diff --git a/base/gscspace.h b/base/gscspace.h index 83b1003ab..c46ffdbc0 100644 --- a/base/gscspace.h +++ b/base/gscspace.h @@ -224,12 +224,12 @@ typedef enum { SEP_NONE, SEP_ALL, SEP_OTHER } separation_type; typedef enum { SEP_ENUM, SEP_MIX, SEP_PURE_RGB, SEP_PURE_CMYK } separation_colors; typedef struct gs_separation_params_s { - gs_separation_name sep_name; + gs_memory_t *mem; + char *sep_name; gs_device_n_map *map; separation_type sep_type; bool use_alt_cspace; bool named_color_supported; - gs_callback_func_get_colorname_string *get_colorname_string; separation_colors color_type; } gs_separation_params; diff --git a/base/gsequivc.c b/base/gsequivc.c index c80421f65..1cdd75d2a 100644 --- a/base/gsequivc.c +++ b/base/gsequivc.c @@ -128,9 +128,8 @@ update_Separation_spot_equivalent_cmyk_colors(gx_device * pdev, unsigned int cs_sep_name_size; unsigned char * pcs_sep_name; - pcs->params.separation.get_colorname_string - (pdev->memory, pcs->params.separation.sep_name, &pcs_sep_name, - &cs_sep_name_size); + pcs_sep_name = (unsigned char *)pcs->params.separation.sep_name; + cs_sep_name_size = strlen(pcs->params.separation.sep_name); if (compare_color_names(dev_sep_name->data, dev_sep_name->size, pcs_sep_name, cs_sep_name_size)) { gs_color_space temp_cs = *pcs; diff --git a/base/gsicc_cache.c b/base/gsicc_cache.c index a7a0be9a3..c95d8d36c 100644 --- a/base/gsicc_cache.c +++ b/base/gsicc_cache.c @@ -1530,7 +1530,6 @@ gsicc_support_named_color(const gs_color_space *pcs, const gs_gstate *pgs) int k, code, i, num_comp, num_spots=0, num_process=0, num_other=0; gs_color_space_index type = gs_color_space_get_index(pcs); char **names = NULL; - gs_separation_name name = 0; /* quite compiler warning*/ byte *pname; uint name_size; bool is_supported; @@ -1553,7 +1552,7 @@ gsicc_support_named_color(const gs_color_space *pcs, const gs_gstate *pgs) names = pcs->params.device_n.names; num_comp = pcs->params.device_n.num_components; } else if (type == gs_color_space_index_Separation) { - name = pcs->params.separation.sep_name; + pname = (byte *)pcs->params.separation.sep_name; num_comp = 1; } else return false; @@ -1564,8 +1563,9 @@ gsicc_support_named_color(const gs_color_space *pcs, const gs_gstate *pgs) pname = (byte *)names[i]; name_size = strlen(names[i]); } - else - pcs->params.separation.get_colorname_string(pgs->memory, name, &pname, &name_size); + else { + name_size = strlen(pcs->params.separation.sep_name); + } /* Classify */ if (strncmp((char *)pname, "None", name_size) == 0 || diff --git a/base/gxcmap.c b/base/gxcmap.c index 8d91181ca..f1797d53f 100644 --- a/base/gxcmap.c +++ b/base/gxcmap.c @@ -598,7 +598,6 @@ gx_device_color * pdc, const gs_gstate * pgs, gx_device * dev, gs_color_select_t select) { gx_color_value device_values[GX_DEVICE_COLOR_MAX_COMPONENTS]; - const gs_separation_name name = pcs->params.separation.sep_name; byte *pname; uint name_size; gsicc_rendering_param_t rendering_params; @@ -623,10 +622,8 @@ gs_color_select_t select) rendering_params.cmm = gsCMM_DEFAULT; if (type == gs_color_space_index_Separation) { - pcs->params.separation.get_colorname_string(pgs->memory, name, - &pname, &name_size); - named_color_sep.colorant_name = (char*)pname; - named_color_sep.name_size = name_size; + named_color_sep.colorant_name = pcs->params.separation.sep_name; + named_color_sep.name_size = strlen(pcs->params.separation.sep_name); named_color_ptr = &named_color_sep; } else if (type == gs_color_space_index_DeviceN) { char **names = pcs->params.device_n.names; |