Mercurial > emacs
comparison src/coding.c @ 103035:6e443d717c7b
(decode_coding_utf_16): Reduce charbuf_end for the
worst case.
(decode_coding_emacs_mule, decode_coding_iso_2022)
(decode_coding_sjis, decode_coding_big5, decode_coding_charset):
Likewise.
| author | Kenichi Handa <handa@m17n.org> |
|---|---|
| date | Tue, 21 Apr 2009 06:36:03 +0000 |
| parents | 41e7ab490f69 |
| children | e68707cf48a5 |
comparison
equal
deleted
inserted
replaced
| 103034:c77b801c1161 | 103035:6e443d717c7b |
|---|---|
| 1701 { | 1701 { |
| 1702 const unsigned char *src = coding->source + coding->consumed; | 1702 const unsigned char *src = coding->source + coding->consumed; |
| 1703 const unsigned char *src_end = coding->source + coding->src_bytes; | 1703 const unsigned char *src_end = coding->source + coding->src_bytes; |
| 1704 const unsigned char *src_base; | 1704 const unsigned char *src_base; |
| 1705 int *charbuf = coding->charbuf + coding->charbuf_used; | 1705 int *charbuf = coding->charbuf + coding->charbuf_used; |
| 1706 int *charbuf_end = coding->charbuf + coding->charbuf_size; | 1706 /* We may produces at most 3 chars in one loop. */ |
| 1707 int *charbuf_end = coding->charbuf + coding->charbuf_size - 2; | |
| 1707 int consumed_chars = 0, consumed_chars_base = 0; | 1708 int consumed_chars = 0, consumed_chars_base = 0; |
| 1708 int multibytep = coding->src_multibyte; | 1709 int multibytep = coding->src_multibyte; |
| 1709 enum utf_bom_type bom = CODING_UTF_16_BOM (coding); | 1710 enum utf_bom_type bom = CODING_UTF_16_BOM (coding); |
| 1710 enum utf_16_endian_type endian = CODING_UTF_16_ENDIAN (coding); | 1711 enum utf_16_endian_type endian = CODING_UTF_16_ENDIAN (coding); |
| 1711 int surrogate = CODING_UTF_16_SURROGATE (coding); | 1712 int surrogate = CODING_UTF_16_SURROGATE (coding); |
| 1747 int c, c1, c2; | 1748 int c, c1, c2; |
| 1748 | 1749 |
| 1749 src_base = src; | 1750 src_base = src; |
| 1750 consumed_chars_base = consumed_chars; | 1751 consumed_chars_base = consumed_chars; |
| 1751 | 1752 |
| 1752 if (charbuf + 2 >= charbuf_end) | 1753 if (charbuf >= charbuf_end) |
| 1753 { | 1754 { |
| 1754 if (byte_after_cr1 >= 0) | 1755 if (byte_after_cr1 >= 0) |
| 1755 src_base -= 2; | 1756 src_base -= 2; |
| 1756 break; | 1757 break; |
| 1757 } | 1758 } |
| 2440 { | 2441 { |
| 2441 const unsigned char *src = coding->source + coding->consumed; | 2442 const unsigned char *src = coding->source + coding->consumed; |
| 2442 const unsigned char *src_end = coding->source + coding->src_bytes; | 2443 const unsigned char *src_end = coding->source + coding->src_bytes; |
| 2443 const unsigned char *src_base; | 2444 const unsigned char *src_base; |
| 2444 int *charbuf = coding->charbuf + coding->charbuf_used; | 2445 int *charbuf = coding->charbuf + coding->charbuf_used; |
| 2446 /* We may produce two annocations (charset and composition) in one | |
| 2447 loop and one more charset annocation at the end. */ | |
| 2445 int *charbuf_end | 2448 int *charbuf_end |
| 2446 = coding->charbuf + coding->charbuf_size - MAX_ANNOTATION_LENGTH; | 2449 = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 3); |
| 2447 int consumed_chars = 0, consumed_chars_base; | 2450 int consumed_chars = 0, consumed_chars_base; |
| 2448 int multibytep = coding->src_multibyte; | 2451 int multibytep = coding->src_multibyte; |
| 2449 Lisp_Object attrs, charset_list; | 2452 Lisp_Object attrs, charset_list; |
| 2450 int char_offset = coding->produced_char; | 2453 int char_offset = coding->produced_char; |
| 2451 int last_offset = char_offset; | 2454 int last_offset = char_offset; |
| 3556 { | 3559 { |
| 3557 const unsigned char *src = coding->source + coding->consumed; | 3560 const unsigned char *src = coding->source + coding->consumed; |
| 3558 const unsigned char *src_end = coding->source + coding->src_bytes; | 3561 const unsigned char *src_end = coding->source + coding->src_bytes; |
| 3559 const unsigned char *src_base; | 3562 const unsigned char *src_base; |
| 3560 int *charbuf = coding->charbuf + coding->charbuf_used; | 3563 int *charbuf = coding->charbuf + coding->charbuf_used; |
| 3564 /* We may produce two annocations (charset and composition) in one | |
| 3565 loop and one more charset annocation at the end. */ | |
| 3561 int *charbuf_end | 3566 int *charbuf_end |
| 3562 = coding->charbuf + coding->charbuf_size - MAX_ANNOTATION_LENGTH; | 3567 = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 3); |
| 3563 int consumed_chars = 0, consumed_chars_base; | 3568 int consumed_chars = 0, consumed_chars_base; |
| 3564 int multibytep = coding->src_multibyte; | 3569 int multibytep = coding->src_multibyte; |
| 3565 /* Charsets invoked to graphic plane 0 and 1 respectively. */ | 3570 /* Charsets invoked to graphic plane 0 and 1 respectively. */ |
| 3566 int charset_id_0 = CODING_ISO_INVOKED_CHARSET (coding, 0); | 3571 int charset_id_0 = CODING_ISO_INVOKED_CHARSET (coding, 0); |
| 3567 int charset_id_1 = CODING_ISO_INVOKED_CHARSET (coding, 1); | 3572 int charset_id_1 = CODING_ISO_INVOKED_CHARSET (coding, 1); |
| 4756 { | 4761 { |
| 4757 const unsigned char *src = coding->source + coding->consumed; | 4762 const unsigned char *src = coding->source + coding->consumed; |
| 4758 const unsigned char *src_end = coding->source + coding->src_bytes; | 4763 const unsigned char *src_end = coding->source + coding->src_bytes; |
| 4759 const unsigned char *src_base; | 4764 const unsigned char *src_base; |
| 4760 int *charbuf = coding->charbuf + coding->charbuf_used; | 4765 int *charbuf = coding->charbuf + coding->charbuf_used; |
| 4766 /* We may produce one charset annocation in one loop and one more at | |
| 4767 the end. */ | |
| 4761 int *charbuf_end | 4768 int *charbuf_end |
| 4762 = coding->charbuf + coding->charbuf_size - MAX_ANNOTATION_LENGTH; | 4769 = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 2); |
| 4763 int consumed_chars = 0, consumed_chars_base; | 4770 int consumed_chars = 0, consumed_chars_base; |
| 4764 int multibytep = coding->src_multibyte; | 4771 int multibytep = coding->src_multibyte; |
| 4765 struct charset *charset_roman, *charset_kanji, *charset_kana; | 4772 struct charset *charset_roman, *charset_kanji, *charset_kana; |
| 4766 struct charset *charset_kanji2; | 4773 struct charset *charset_kanji2; |
| 4767 Lisp_Object attrs, charset_list, val; | 4774 Lisp_Object attrs, charset_list, val; |
| 4873 { | 4880 { |
| 4874 const unsigned char *src = coding->source + coding->consumed; | 4881 const unsigned char *src = coding->source + coding->consumed; |
| 4875 const unsigned char *src_end = coding->source + coding->src_bytes; | 4882 const unsigned char *src_end = coding->source + coding->src_bytes; |
| 4876 const unsigned char *src_base; | 4883 const unsigned char *src_base; |
| 4877 int *charbuf = coding->charbuf + coding->charbuf_used; | 4884 int *charbuf = coding->charbuf + coding->charbuf_used; |
| 4885 /* We may produce one charset annocation in one loop and one more at | |
| 4886 the end. */ | |
| 4878 int *charbuf_end | 4887 int *charbuf_end |
| 4879 = coding->charbuf + coding->charbuf_size - MAX_ANNOTATION_LENGTH; | 4888 = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 2); |
| 4880 int consumed_chars = 0, consumed_chars_base; | 4889 int consumed_chars = 0, consumed_chars_base; |
| 4881 int multibytep = coding->src_multibyte; | 4890 int multibytep = coding->src_multibyte; |
| 4882 struct charset *charset_roman, *charset_big5; | 4891 struct charset *charset_roman, *charset_big5; |
| 4883 Lisp_Object attrs, charset_list, val; | 4892 Lisp_Object attrs, charset_list, val; |
| 4884 int char_offset = coding->produced_char; | 4893 int char_offset = coding->produced_char; |
| 5547 { | 5556 { |
| 5548 const unsigned char *src = coding->source + coding->consumed; | 5557 const unsigned char *src = coding->source + coding->consumed; |
| 5549 const unsigned char *src_end = coding->source + coding->src_bytes; | 5558 const unsigned char *src_end = coding->source + coding->src_bytes; |
| 5550 const unsigned char *src_base; | 5559 const unsigned char *src_base; |
| 5551 int *charbuf = coding->charbuf + coding->charbuf_used; | 5560 int *charbuf = coding->charbuf + coding->charbuf_used; |
| 5561 /* We may produce one charset annocation in one loop and one more at | |
| 5562 the end. */ | |
| 5552 int *charbuf_end | 5563 int *charbuf_end |
| 5553 = coding->charbuf + coding->charbuf_size - MAX_ANNOTATION_LENGTH; | 5564 = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 2); |
| 5554 int consumed_chars = 0, consumed_chars_base; | 5565 int consumed_chars = 0, consumed_chars_base; |
| 5555 int multibytep = coding->src_multibyte; | 5566 int multibytep = coding->src_multibyte; |
| 5556 Lisp_Object attrs, charset_list, valids; | 5567 Lisp_Object attrs, charset_list, valids; |
| 5557 int char_offset = coding->produced_char; | 5568 int char_offset = coding->produced_char; |
| 5558 int last_offset = char_offset; | 5569 int last_offset = char_offset; |
