26
26
gs_param_string_eq(const gs_param_string * pcs, const char *str)
28
28
return (strlen(str) == pcs->size &&
29
!strncmp(str, (const char *)pcs->data, pcs->size));
29
!strncmp(str, (const char *)pcs->data, pcs->size));
32
32
/* Put an enumerated value. */
34
34
param_put_enum(gs_param_list * plist, gs_param_name param_name,
35
int *pvalue, const char *const pnames[], int ecode)
35
int *pvalue, const char *const pnames[], int ecode)
37
37
gs_param_string ens;
38
38
int code = param_read_name(plist, param_name, &ens);
47
for (i = 0; pnames[i] != 0; ++i)
48
if (gs_param_string_eq(&ens, pnames[i])) {
53
code = gs_error_rangecheck;
56
param_signal_error(plist, param_name, code);
47
for (i = 0; pnames[i] != 0; ++i)
48
if (gs_param_string_eq(&ens, pnames[i])) {
53
code = gs_error_rangecheck;
56
param_signal_error(plist, param_name, code);
128
128
param_init_enumerator(&key_enum);
129
129
while ((code = param_get_next_key(plfrom, &key_enum, &key)) == 0) {
130
char string_key[256]; /* big enough for any reasonable key */
131
gs_param_typed_value value;
132
gs_param_collection_type_t coll_type;
133
gs_param_typed_value copy;
130
char string_key[256]; /* big enough for any reasonable key */
131
gs_param_typed_value value;
132
gs_param_collection_type_t coll_type;
133
gs_param_typed_value copy;
135
if (key.size > sizeof(string_key) - 1) {
136
code = gs_note_error(gs_error_rangecheck);
139
memcpy(string_key, key.data, key.size);
140
string_key[key.size] = 0;
141
if ((code = param_read_typed(plfrom, string_key, &value)) != 0) {
142
code = (code > 0 ? gs_note_error(gs_error_unknownerror) : code);
145
gs_param_list_set_persistent_keys(plto, key.persistent);
146
switch (value.type) {
147
case gs_param_type_dict:
148
coll_type = gs_param_collection_dict_any;
150
case gs_param_type_dict_int_keys:
151
coll_type = gs_param_collection_dict_int_keys;
153
case gs_param_type_array:
154
coll_type = gs_param_collection_array;
156
copy.value.d.size = value.value.d.size;
157
if ((code = param_begin_write_collection(plto, string_key,
160
(code = param_list_copy(copy.value.d.list,
161
value.value.d.list)) < 0 ||
162
(code = param_end_write_collection(plto, string_key,
165
code = param_end_read_collection(plfrom, string_key,
168
case gs_param_type_string:
169
value.value.s.persistent &= copy_persists; goto ca;
170
case gs_param_type_name:
171
value.value.n.persistent &= copy_persists; goto ca;
172
case gs_param_type_int_array:
173
value.value.ia.persistent &= copy_persists; goto ca;
174
case gs_param_type_float_array:
175
value.value.fa.persistent &= copy_persists; goto ca;
176
case gs_param_type_string_array:
177
value.value.sa.persistent &= copy_persists;
180
code = param_write_typed(plto, string_key, &value);
135
if (key.size > sizeof(string_key) - 1) {
136
code = gs_note_error(gs_error_rangecheck);
139
memcpy(string_key, key.data, key.size);
140
string_key[key.size] = 0;
141
if ((code = param_read_typed(plfrom, string_key, &value)) != 0) {
142
code = (code > 0 ? gs_note_error(gs_error_unknownerror) : code);
145
gs_param_list_set_persistent_keys(plto, key.persistent);
146
switch (value.type) {
147
case gs_param_type_dict:
148
coll_type = gs_param_collection_dict_any;
150
case gs_param_type_dict_int_keys:
151
coll_type = gs_param_collection_dict_int_keys;
153
case gs_param_type_array:
154
coll_type = gs_param_collection_array;
156
copy.value.d.size = value.value.d.size;
157
if ((code = param_begin_write_collection(plto, string_key,
160
(code = param_list_copy(copy.value.d.list,
161
value.value.d.list)) < 0 ||
162
(code = param_end_write_collection(plto, string_key,
165
code = param_end_read_collection(plfrom, string_key,
168
case gs_param_type_string:
169
value.value.s.persistent &= copy_persists; goto ca;
170
case gs_param_type_name:
171
value.value.n.persistent &= copy_persists; goto ca;
172
case gs_param_type_int_array:
173
value.value.ia.persistent &= copy_persists; goto ca;
174
case gs_param_type_float_array:
175
value.value.fa.persistent &= copy_persists; goto ca;
176
case gs_param_type_string_array:
177
value.value.sa.persistent &= copy_persists;
180
code = param_write_typed(plto, string_key, &value);