summaryrefslogtreecommitdiff
path: root/base
diff options
context:
space:
mode:
authorKen Sharp <ken.sharp@artifex.com>2019-05-07 12:52:25 +0100
committerKen Sharp <ken.sharp@artifex.com>2019-05-08 15:27:28 +0100
commit0d75869134c69963406500b536fb1bb1c97c8621 (patch)
tree23c9014d895b88f15b0cf0fa7d18622492a1bf31 /base
parent97253bf54a701d5e433378df953e066d009afde0 (diff)
downloadghostpdl-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.c10
-rw-r--r--base/gscsepr.c17
-rw-r--r--base/gscspace.h4
-rw-r--r--base/gsequivc.c5
-rw-r--r--base/gsicc_cache.c8
-rw-r--r--base/gxcmap.c7
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;