Mercurial > emacs
comparison src/charset.h @ 44323:fcc0f55d734f
(DEC_POS, BUF_DEC_POS): Use BEG_BYTE.
Bound the search with MAX_MULTIBYTE_LENGTH to avoid pathological case.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Mon, 01 Apr 2002 22:58:39 +0000 |
parents | ab30bd62a6a8 |
children | 40db0673e6f0 |
comparison
equal
deleted
inserted
replaced
44322:fca902769bf4 | 44323:fcc0f55d734f |
---|---|
673 do { \ | 673 do { \ |
674 unsigned char *p, *p_min; \ | 674 unsigned char *p, *p_min; \ |
675 \ | 675 \ |
676 pos_byte--; \ | 676 pos_byte--; \ |
677 if (pos_byte < GPT_BYTE) \ | 677 if (pos_byte < GPT_BYTE) \ |
678 p = BEG_ADDR + pos_byte - 1, p_min = BEG_ADDR; \ | 678 p = BEG_ADDR + pos_byte - BEG_BYTE, p_min = BEG_ADDR; \ |
679 else \ | 679 else \ |
680 p = BEG_ADDR + GAP_SIZE + pos_byte - 1, p_min = GAP_END_ADDR; \ | 680 p = BEG_ADDR + GAP_SIZE + pos_byte - BEG_BYTE, p_min = GAP_END_ADDR;\ |
681 if (p > p_min && !CHAR_HEAD_P (*p)) \ | 681 if (p > p_min && !CHAR_HEAD_P (*p)) \ |
682 { \ | 682 { \ |
683 unsigned char *pend = p--; \ | 683 unsigned char *pend = p--; \ |
684 int len, bytes; \ | 684 int len, bytes; \ |
685 if (p_min < p - MAX_MULTIBYTE_LENGTH) \ | |
686 p_min = p - MAX_MULTIBYTE_LENGTH; \ | |
685 while (p > p_min && !CHAR_HEAD_P (*p)) p--; \ | 687 while (p > p_min && !CHAR_HEAD_P (*p)) p--; \ |
686 len = pend + 1 - p; \ | 688 len = pend + 1 - p; \ |
687 PARSE_MULTIBYTE_SEQ (p, len, bytes); \ | 689 PARSE_MULTIBYTE_SEQ (p, len, bytes); \ |
688 if (bytes == len) \ | 690 if (bytes == len) \ |
689 pos_byte -= len - 1; \ | 691 pos_byte -= len - 1; \ |
753 do { \ | 755 do { \ |
754 unsigned char *p, *p_min; \ | 756 unsigned char *p, *p_min; \ |
755 pos_byte--; \ | 757 pos_byte--; \ |
756 if (pos_byte < BUF_GPT_BYTE (buf)) \ | 758 if (pos_byte < BUF_GPT_BYTE (buf)) \ |
757 { \ | 759 { \ |
758 p = BUF_BEG_ADDR (buf) + pos_byte - 1; \ | 760 p = BUF_BEG_ADDR (buf) + pos_byte - BEG_BYTE; \ |
759 p_min = BUF_BEG_ADDR (buf); \ | 761 p_min = BUF_BEG_ADDR (buf); \ |
760 } \ | 762 } \ |
761 else \ | 763 else \ |
762 { \ | 764 { \ |
763 p = BUF_BEG_ADDR (buf) + BUF_GAP_SIZE (buf) + pos_byte - 1; \ | 765 p = BUF_BEG_ADDR (buf) + BUF_GAP_SIZE (buf) + pos_byte - BEG_BYTE;\ |
764 p_min = BUF_GAP_END_ADDR (buf); \ | 766 p_min = BUF_GAP_END_ADDR (buf); \ |
765 } \ | 767 } \ |
766 if (p > p_min && !CHAR_HEAD_P (*p)) \ | 768 if (p > p_min && !CHAR_HEAD_P (*p)) \ |
767 { \ | 769 { \ |
768 unsigned char *pend = p--; \ | 770 unsigned char *pend = p--; \ |
769 int len, bytes; \ | 771 int len, bytes; \ |
772 if (p_min < p - MAX_MULTIBYTE_LENGTH) \ | |
773 p_min = p - MAX_MULTIBYTE_LENGTH; \ | |
770 while (p > p_min && !CHAR_HEAD_P (*p)) p--; \ | 774 while (p > p_min && !CHAR_HEAD_P (*p)) p--; \ |
771 len = pend + 1 - p; \ | 775 len = pend + 1 - p; \ |
772 PARSE_MULTIBYTE_SEQ (p, len, bytes); \ | 776 PARSE_MULTIBYTE_SEQ (p, len, bytes); \ |
773 if (bytes == len) \ | 777 if (bytes == len) \ |
774 pos_byte -= len - 1; \ | 778 pos_byte -= len - 1; \ |