diff options
-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 | ||||
-rw-r--r-- | devices/vector/gdevpdfc.c | 12 | ||||
-rw-r--r-- | devices/vector/gdevpdfg.c | 21 | ||||
-rw-r--r-- | psi/zcolor.c | 14 |
9 files changed, 43 insertions, 55 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; diff --git a/devices/vector/gdevpdfc.c b/devices/vector/gdevpdfc.c index ec1bf6cd8..570c3f00a 100644 --- a/devices/vector/gdevpdfc.c +++ b/devices/vector/gdevpdfc.c @@ -1203,18 +1203,12 @@ pdf_color_space_named(gx_device_pdf *pdev, const gs_gstate * pgs, if (pfn == 0) return_error(gs_error_rangecheck); { - byte *name_string; - uint name_string_length; - if ((code = pcs->params.separation.get_colorname_string( - pdev->memory, - pcs->params.separation.sep_name, &name_string, - &name_string_length)) < 0 || - (code = pdf_string_to_cos_name(pdev, name_string, - name_string_length, &v)) < 0 || + if ((code = pdf_string_to_cos_name(pdev, (const byte *)pcs->params.separation.sep_name, + strlen(pcs->params.separation.sep_name), &v)) < 0 || (code = pdf_separation_color_space(pdev, pgs, pca, "/Separation", &v, pcs->base_space, pfn, &pdf_color_space_names, NULL)) < 0) - return code; + return code; } break; diff --git a/devices/vector/gdevpdfg.c b/devices/vector/gdevpdfg.c index e91775561..a33b12a19 100644 --- a/devices/vector/gdevpdfg.c +++ b/devices/vector/gdevpdfg.c @@ -1278,21 +1278,14 @@ int convert_separation_alternate(gx_device_pdf * pdev, const gs_gstate * pgs, co if (code >= 0) { csi = gs_color_space_get_index(pcs); - if (csi == gs_color_space_index_Indexed) - code = pcs->base_space->params.separation.get_colorname_string( - pdev->memory, - pcs->base_space->params.separation.sep_name, &name_string, - &name_string_length); - else - code = pcs->params.separation.get_colorname_string( - pdev->memory, - pcs->params.separation.sep_name, &name_string, - &name_string_length); - if (code < 0) { - COS_FREE(pca, "pdf_color_space"); - return code; + if (csi == gs_color_space_index_Indexed) { + name_string = (byte *)pcs->base_space->params.separation.sep_name; + name_string_length = strlen(pcs->base_space->params.separation.sep_name); + } + else { + name_string = (byte *)pcs->params.separation.sep_name; + name_string_length = strlen(pcs->params.separation.sep_name); } - code = pdf_string_to_cos_name(pdev, name_string, name_string_length, &v); if (code < 0) { diff --git a/psi/zcolor.c b/psi/zcolor.c index 7ea73ca04..c62c4bebe 100644 --- a/psi/zcolor.c +++ b/psi/zcolor.c @@ -3420,8 +3420,11 @@ static int setseparationspace(i_ctx_t * i_ctx_p, ref *sepspace, int *stage, int if (code < 0) return code; pcs->params.separation.sep_type = sep_type; - pcs->params.separation.sep_name = name_index(imemory, &sname); - pcs->params.separation.get_colorname_string = gs_get_colorname_string; + pcs->params.separation.mem = imemory->non_gc_memory; + name_string_ref(imemory, &sname, &sname); + pcs->params.separation.sep_name = (char *)gs_alloc_bytes(pcs->params.separation.mem, r_size(&sname) + 1, "Separation name"); + memcpy(pcs->params.separation.sep_name, sname.value.bytes, r_size(&sname)); + pcs->params.separation.sep_name[r_size(&sname)] = 0x00; code = array_get(imemory, sepspace, 1, &proc); if (code < 0) return code; @@ -4120,8 +4123,11 @@ static int setdevicenspace(i_ctx_t * i_ctx_p, ref *devicenspace, int *stage, int if (code < 0) return code; pcs->params.separation.sep_type = sep_type; - pcs->params.separation.sep_name = name_index(imemory, &sname); - pcs->params.separation.get_colorname_string = gs_get_colorname_string; + pcs->params.separation.mem = imemory->non_gc_memory; + name_string_ref(imemory, &sname, &sname); + pcs->params.separation.sep_name = (char *)gs_alloc_bytes(pcs->params.separation.mem, r_size(&sname) + 1, "Separation name"); + memcpy(pcs->params.separation.sep_name, sname.value.bytes, r_size(&sname)); + pcs->params.separation.sep_name[r_size(&sname)] = 0x00; code = array_get(imemory, &namesarray, (long)0, &sname); if (code < 0) return code; |