diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/coding.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/coding.c b/src/coding.c index 4b70b259314..4dc4f68143f 100644 --- a/src/coding.c +++ b/src/coding.c | |||
| @@ -3045,12 +3045,18 @@ setup_coding_system (coding_system, coding) | |||
| 3045 | |= CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK; | 3045 | |= CODING_REQUIRE_DECODING_MASK | CODING_REQUIRE_ENCODING_MASK; |
| 3046 | { | 3046 | { |
| 3047 | Lisp_Object val = XVECTOR (coding_spec)->contents[4]; | 3047 | Lisp_Object val = XVECTOR (coding_spec)->contents[4]; |
| 3048 | Lisp_Object decoder, encoder; | ||
| 3049 | |||
| 3048 | if (CONSP (val) | 3050 | if (CONSP (val) |
| 3049 | && VECTORP (XCONS (val)->car) | 3051 | && SYMBOLP (XCONS (val)->car) |
| 3050 | && VECTORP (XCONS (val)->cdr)) | 3052 | && !NILP (decoder = Fget (XCONS (val)->car, Qccl_program_idx)) |
| 3053 | && (decoder = Fcdr (Faref (Vccl_program_table, decoder))) | ||
| 3054 | && SYMBOLP (XCONS (val)->cdr) | ||
| 3055 | && !NILP (encoder = Fget (XCONS (val)->cdr, Qccl_program_idx)) | ||
| 3056 | && (encoder = Fcdr (Faref (Vccl_program_table, encoder)))) | ||
| 3051 | { | 3057 | { |
| 3052 | setup_ccl_program (&(coding->spec.ccl.decoder), XCONS (val)->car); | 3058 | setup_ccl_program (&(coding->spec.ccl.decoder), decoder); |
| 3053 | setup_ccl_program (&(coding->spec.ccl.encoder), XCONS (val)->cdr); | 3059 | setup_ccl_program (&(coding->spec.ccl.encoder), encoder); |
| 3054 | } | 3060 | } |
| 3055 | else | 3061 | else |
| 3056 | goto label_invalid_coding_system; | 3062 | goto label_invalid_coding_system; |