diff options
author | Robin Watts <Robin.Watts@artifex.com> | 2020-08-06 12:02:59 +0100 |
---|---|---|
committer | Robin Watts <Robin.Watts@artifex.com> | 2020-08-06 12:28:32 +0100 |
commit | 783049405b39fb48f84d4ddee478e4ea10631c3d (patch) | |
tree | 857288fd20146004230b2049f9006e73557a64f6 | |
parent | d1d44a90cf94338fec8ccf73338767ddb07a2254 (diff) | |
download | ghostpdl-783049405b39fb48f84d4ddee478e4ea10631c3d.tar.gz |
Support arrays of names in the param passing code.
-rw-r--r-- | base/gsparaml.c | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/base/gsparaml.c b/base/gsparaml.c index 3c98bab80..0e7365361 100644 --- a/base/gsparaml.c +++ b/base/gsparaml.c @@ -313,7 +313,7 @@ process_array(gs_memory_t *mem, gs_c_param_list *plist, gs_param_name key, char break; case '/': - if (array_type != gs_param_type_null && array_type != gs_param_type_string_array) { + if (array_type != gs_param_type_null && array_type != gs_param_type_name_array) { code = gs_error_typecheck; break; } @@ -332,10 +332,10 @@ process_array(gs_memory_t *mem, gs_c_param_list *plist, gs_param_name key, char array_data = new_array; } array_max = new_max; - array_type = gs_param_type_string_array; + array_type = gs_param_type_name_array; } parray = (gs_param_string *)array_data; - parray[index].data = (const byte *)p1; + parray[index].data = (const byte *)++p1; while (!ends_token(p1)) p1++; parray[index].size = p1 - (char *)(parray[index].data); @@ -474,6 +474,12 @@ return_minus_one: string_array.size = index; code = param_write_string_array((gs_param_list *)plist, key, &string_array); break; + case gs_param_type_name_array: + string_array.data = (const gs_param_string *)array_data; + string_array.persistent = 0; + string_array.size = index; + code = param_write_name_array((gs_param_list *)plist, key, &string_array); + break; case gs_param_type_int_array: int_array.data = (const int *)array_data; int_array.persistent = 0; @@ -815,6 +821,18 @@ string_array_to_string(gs_param_string_array sa, outstate *out) out_string(out, "]"); } +static void +name_array_to_string(gs_param_string_array na, outstate *out) +{ + int i; + + out_string(out, "["); + for (i = 0; i < na.size; i++) { + name_to_string((const char *)na.data[i].data, na.data[i].size, out); + } + out_string(out, "]"); +} + static int to_string(gs_param_list *plist, gs_param_name key, outstate *out); static int @@ -927,6 +945,9 @@ to_string(gs_param_list *plist, gs_param_name key, outstate *out) case gs_param_type_string_array: string_array_to_string(pvalue.value.sa, out); break; + case gs_param_type_name_array: + name_array_to_string(pvalue.value.na, out); + break; default: return -1; } |