Mercurial > emacs
comparison src/coding.c @ 102186:a12d39ca6870
* coding.h (struct coding_system): Make safe_charsets a pointer to
unsigned char.
* coding.c (CODING_ISO_REQUEST): Check for safe_charsets content
being 255.
(SAFE_CHARSET_P): Likewise.
(setup_iso_safe_charsets): Properly setup safe_charsets.
(Fdefine_coding_system_internal): Likewise.
(setup_coding_system): Likewise. Remove unneeded casts.
(detect_coding_iso_2022): Compare Viso_2022_charset_list with
CODING_ATTR_CHARSET_LIST, not CODING_ATTR_SAFE_CHARSETS. Remove
unneeded casts.
| author | Andreas Schwab <schwab@suse.de> |
|---|---|
| date | Sun, 22 Feb 2009 15:48:02 +0000 |
| parents | db1f94e25359 |
| children | d8f068bac680 |
comparison
equal
deleted
inserted
replaced
| 102185:d6a2f8a116ac | 102186:a12d39ca6870 |
|---|---|
| 430 (XINT (AREF (AREF (CODING_ID_ATTRS ((coding)->id), \ | 430 (XINT (AREF (AREF (CODING_ID_ATTRS ((coding)->id), \ |
| 431 coding_attr_iso_initial), \ | 431 coding_attr_iso_initial), \ |
| 432 reg))) | 432 reg))) |
| 433 | 433 |
| 434 | 434 |
| 435 #define CODING_ISO_REQUEST(coding, charset_id) \ | 435 #define CODING_ISO_REQUEST(coding, charset_id) \ |
| 436 ((charset_id <= (coding)->max_charset_id \ | 436 (((charset_id) <= (coding)->max_charset_id \ |
| 437 ? (coding)->safe_charsets[charset_id] \ | 437 ? ((coding)->safe_charsets[charset_id] != 255 \ |
| 438 ? (coding)->safe_charsets[charset_id] \ | |
| 439 : -1) \ | |
| 438 : -1)) | 440 : -1)) |
| 439 | 441 |
| 440 | 442 |
| 441 #define CODING_ISO_FLAGS(coding) \ | 443 #define CODING_ISO_FLAGS(coding) \ |
| 442 ((coding)->spec.iso_2022.flags) | 444 ((coding)->spec.iso_2022.flags) |
| 2727 | 2729 |
| 2728 enum iso_code_class_type iso_code_class[256]; | 2730 enum iso_code_class_type iso_code_class[256]; |
| 2729 | 2731 |
| 2730 #define SAFE_CHARSET_P(coding, id) \ | 2732 #define SAFE_CHARSET_P(coding, id) \ |
| 2731 ((id) <= (coding)->max_charset_id \ | 2733 ((id) <= (coding)->max_charset_id \ |
| 2732 && (coding)->safe_charsets[id] >= 0) | 2734 && (coding)->safe_charsets[id] != 255) |
| 2733 | 2735 |
| 2734 | 2736 |
| 2735 #define SHIFT_OUT_OK(category) \ | 2737 #define SHIFT_OUT_OK(category) \ |
| 2736 (CODING_ISO_INITIAL (&coding_categories[category], 1) >= 0) | 2738 (CODING_ISO_INITIAL (&coding_categories[category], 1) >= 0) |
| 2737 | 2739 |
| 2765 int id = XINT (XCAR (tail)); | 2767 int id = XINT (XCAR (tail)); |
| 2766 if (max_charset_id < id) | 2768 if (max_charset_id < id) |
| 2767 max_charset_id = id; | 2769 max_charset_id = id; |
| 2768 } | 2770 } |
| 2769 | 2771 |
| 2770 safe_charsets = Fmake_string (make_number (max_charset_id + 1), | 2772 safe_charsets = make_uninit_string (max_charset_id + 1); |
| 2771 make_number (255)); | 2773 memset (SDATA (safe_charsets), 255, max_charset_id + 1); |
| 2772 request = AREF (attrs, coding_attr_iso_request); | 2774 request = AREF (attrs, coding_attr_iso_request); |
| 2773 reg_usage = AREF (attrs, coding_attr_iso_usage); | 2775 reg_usage = AREF (attrs, coding_attr_iso_usage); |
| 2774 reg94 = XINT (XCAR (reg_usage)); | 2776 reg94 = XINT (XCAR (reg_usage)); |
| 2775 reg96 = XINT (XCDR (reg_usage)); | 2777 reg96 = XINT (XCDR (reg_usage)); |
| 2776 | 2778 |
| 2830 | 2832 |
| 2831 if (this->id < 0) | 2833 if (this->id < 0) |
| 2832 continue; | 2834 continue; |
| 2833 attrs = CODING_ID_ATTRS (this->id); | 2835 attrs = CODING_ID_ATTRS (this->id); |
| 2834 if (CODING_ISO_FLAGS (this) & CODING_ISO_FLAG_FULL_SUPPORT | 2836 if (CODING_ISO_FLAGS (this) & CODING_ISO_FLAG_FULL_SUPPORT |
| 2835 && ! EQ (CODING_ATTR_SAFE_CHARSETS (attrs), Viso_2022_charset_list)) | 2837 && ! EQ (CODING_ATTR_CHARSET_LIST (attrs), Viso_2022_charset_list)) |
| 2836 setup_iso_safe_charsets (attrs); | 2838 setup_iso_safe_charsets (attrs); |
| 2837 val = CODING_ATTR_SAFE_CHARSETS (attrs); | 2839 val = CODING_ATTR_SAFE_CHARSETS (attrs); |
| 2838 this->max_charset_id = SCHARS (val) - 1; | 2840 this->max_charset_id = SCHARS (val) - 1; |
| 2839 this->safe_charsets = (char *) SDATA (val); | 2841 this->safe_charsets = SDATA (val); |
| 2840 } | 2842 } |
| 2841 | 2843 |
| 2842 /* A coding system of this category is always ASCII compatible. */ | 2844 /* A coding system of this category is always ASCII compatible. */ |
| 2843 src += coding->head_ascii; | 2845 src += coding->head_ascii; |
| 2844 | 2846 |
| 3244 | 3246 |
| 3245 CODING_GET_INFO (coding, attrs, charset_list); | 3247 CODING_GET_INFO (coding, attrs, charset_list); |
| 3246 setup_iso_safe_charsets (attrs); | 3248 setup_iso_safe_charsets (attrs); |
| 3247 /* Charset list may have been changed. */ | 3249 /* Charset list may have been changed. */ |
| 3248 charset_list = CODING_ATTR_CHARSET_LIST (attrs); | 3250 charset_list = CODING_ATTR_CHARSET_LIST (attrs); |
| 3249 coding->safe_charsets = (char *) SDATA (CODING_ATTR_SAFE_CHARSETS(attrs)); | 3251 coding->safe_charsets = SDATA (CODING_ATTR_SAFE_CHARSETS (attrs)); |
| 3250 | 3252 |
| 3251 while (1) | 3253 while (1) |
| 3252 { | 3254 { |
| 3253 int c1, c2; | 3255 int c1, c2; |
| 3254 | 3256 |
| 4131 eol_type = Qunix; | 4133 eol_type = Qunix; |
| 4132 | 4134 |
| 4133 setup_iso_safe_charsets (attrs); | 4135 setup_iso_safe_charsets (attrs); |
| 4134 /* Charset list may have been changed. */ | 4136 /* Charset list may have been changed. */ |
| 4135 charset_list = CODING_ATTR_CHARSET_LIST (attrs); | 4137 charset_list = CODING_ATTR_CHARSET_LIST (attrs); |
| 4136 coding->safe_charsets = (char *) SDATA (CODING_ATTR_SAFE_CHARSETS(attrs)); | 4138 coding->safe_charsets = SDATA (CODING_ATTR_SAFE_CHARSETS (attrs)); |
| 4137 | 4139 |
| 4138 ascii_compatible = ! NILP (CODING_ATTR_ASCII_COMPAT (attrs)); | 4140 ascii_compatible = ! NILP (CODING_ATTR_ASCII_COMPAT (attrs)); |
| 4139 | 4141 |
| 4140 while (charbuf < charbuf_end) | 4142 while (charbuf < charbuf_end) |
| 4141 { | 4143 { |
| 5412 if (! NILP (CODING_ATTR_FOR_UNIBYTE (attrs))) | 5414 if (! NILP (CODING_ATTR_FOR_UNIBYTE (attrs))) |
| 5413 coding->common_flags |= CODING_FOR_UNIBYTE_MASK; | 5415 coding->common_flags |= CODING_FOR_UNIBYTE_MASK; |
| 5414 | 5416 |
| 5415 val = CODING_ATTR_SAFE_CHARSETS (attrs); | 5417 val = CODING_ATTR_SAFE_CHARSETS (attrs); |
| 5416 coding->max_charset_id = SCHARS (val) - 1; | 5418 coding->max_charset_id = SCHARS (val) - 1; |
| 5417 coding->safe_charsets = (char *) SDATA (val); | 5419 coding->safe_charsets = SDATA (val); |
| 5418 coding->default_char = XINT (CODING_ATTR_DEFAULT_CHAR (attrs)); | 5420 coding->default_char = XINT (CODING_ATTR_DEFAULT_CHAR (attrs)); |
| 5419 | 5421 |
| 5420 coding_type = CODING_ATTR_TYPE (attrs); | 5422 coding_type = CODING_ATTR_TYPE (attrs); |
| 5421 if (EQ (coding_type, Qundecided)) | 5423 if (EQ (coding_type, Qundecided)) |
| 5422 { | 5424 { |
| 5457 if (flags & CODING_ISO_FLAG_FULL_SUPPORT) | 5459 if (flags & CODING_ISO_FLAG_FULL_SUPPORT) |
| 5458 { | 5460 { |
| 5459 setup_iso_safe_charsets (attrs); | 5461 setup_iso_safe_charsets (attrs); |
| 5460 val = CODING_ATTR_SAFE_CHARSETS (attrs); | 5462 val = CODING_ATTR_SAFE_CHARSETS (attrs); |
| 5461 coding->max_charset_id = SCHARS (val) - 1; | 5463 coding->max_charset_id = SCHARS (val) - 1; |
| 5462 coding->safe_charsets = (char *) SDATA (val); | 5464 coding->safe_charsets = SDATA (val); |
| 5463 } | 5465 } |
| 5464 CODING_ISO_FLAGS (coding) = flags; | 5466 CODING_ISO_FLAGS (coding) = flags; |
| 5465 } | 5467 } |
| 5466 else if (EQ (coding_type, Qcharset)) | 5468 else if (EQ (coding_type, Qcharset)) |
| 5467 { | 5469 { |
| 5527 | 5529 |
| 5528 for (tail = Vemacs_mule_charset_list; CONSP (tail); | 5530 for (tail = Vemacs_mule_charset_list; CONSP (tail); |
| 5529 tail = XCDR (tail)) | 5531 tail = XCDR (tail)) |
| 5530 if (max_charset_id < XFASTINT (XCAR (tail))) | 5532 if (max_charset_id < XFASTINT (XCAR (tail))) |
| 5531 max_charset_id = XFASTINT (XCAR (tail)); | 5533 max_charset_id = XFASTINT (XCAR (tail)); |
| 5532 safe_charsets = Fmake_string (make_number (max_charset_id + 1), | 5534 safe_charsets = make_uninit_string (max_charset_id + 1); |
| 5533 make_number (255)); | 5535 memset (SDATA (safe_charsets), 255, max_charset_id + 1); |
| 5534 for (tail = Vemacs_mule_charset_list; CONSP (tail); | 5536 for (tail = Vemacs_mule_charset_list; CONSP (tail); |
| 5535 tail = XCDR (tail)) | 5537 tail = XCDR (tail)) |
| 5536 SSET (safe_charsets, XFASTINT (XCAR (tail)), 0); | 5538 SSET (safe_charsets, XFASTINT (XCAR (tail)), 0); |
| 5537 coding->max_charset_id = max_charset_id; | 5539 coding->max_charset_id = max_charset_id; |
| 5538 coding->safe_charsets = (char *) SDATA (safe_charsets); | 5540 coding->safe_charsets = SDATA (safe_charsets); |
| 5539 } | 5541 } |
| 5540 } | 5542 } |
| 5541 else if (EQ (coding_type, Qshift_jis)) | 5543 else if (EQ (coding_type, Qshift_jis)) |
| 5542 { | 5544 { |
| 5543 coding->detector = detect_coding_sjis; | 5545 coding->detector = detect_coding_sjis; |
| 9291 max_charset_id = charset->id; | 9293 max_charset_id = charset->id; |
| 9292 } | 9294 } |
| 9293 } | 9295 } |
| 9294 CODING_ATTR_CHARSET_LIST (attrs) = charset_list; | 9296 CODING_ATTR_CHARSET_LIST (attrs) = charset_list; |
| 9295 | 9297 |
| 9296 safe_charsets = Fmake_string (make_number (max_charset_id + 1), | 9298 safe_charsets = make_uninit_string (max_charset_id + 1); |
| 9297 make_number (255)); | 9299 memset (SDATA (safe_charsets), 255, max_charset_id + 1); |
| 9298 for (tail = charset_list; CONSP (tail); tail = XCDR (tail)) | 9300 for (tail = charset_list; CONSP (tail); tail = XCDR (tail)) |
| 9299 SSET (safe_charsets, XFASTINT (XCAR (tail)), 0); | 9301 SSET (safe_charsets, XFASTINT (XCAR (tail)), 0); |
| 9300 CODING_ATTR_SAFE_CHARSETS (attrs) = safe_charsets; | 9302 CODING_ATTR_SAFE_CHARSETS (attrs) = safe_charsets; |
| 9301 | 9303 |
| 9302 CODING_ATTR_ASCII_COMPAT (attrs) = args[coding_arg_ascii_compatible_p]; | 9304 CODING_ATTR_ASCII_COMPAT (attrs) = args[coding_arg_ascii_compatible_p]; |
