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];