aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenichi Handa1997-03-18 23:31:34 +0000
committerKenichi Handa1997-03-18 23:31:34 +0000
commite57bca5d35f6a700d7f9162d17ef9bc1334ac17a (patch)
treec28ba98c6e33340c7717f8adc3005437a6332dab /src
parent81ba44e5ff6ee0f8c5a725dc515620043d515b29 (diff)
downloademacs-e57bca5d35f6a700d7f9162d17ef9bc1334ac17a.tar.gz
emacs-e57bca5d35f6a700d7f9162d17ef9bc1334ac17a.zip
(copy_part_of_rope): Declare glyph as type GLYPH. For a
invalid character code, use ' ' (space). (display_string, display_text_line): Check validity of character code before calling fix_glyph.
Diffstat (limited to 'src')
-rw-r--r--src/xdisp.c43
1 files changed, 29 insertions, 14 deletions
diff --git a/src/xdisp.c b/src/xdisp.c
index 7384985dbc6..c9aa763edbb 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -2617,8 +2617,13 @@ copy_part_of_rope (f, to, s, from, len, face)
2617 if (! FRAME_TERMCAP_P (f)) 2617 if (! FRAME_TERMCAP_P (f))
2618 while (n--) 2618 while (n--)
2619 { 2619 {
2620 int glyph = (INTEGERP (*fp) ? XFASTINT (*fp) : 0); 2620 GLYPH glyph = (INTEGERP (*fp) ? XFASTINT (*fp) : 0);
2621 int facecode; 2621 int facecode;
2622 unsigned int c = FAST_GLYPH_CHAR (glyph);
2623
2624 if (c > MAX_CHAR)
2625 /* For an invalid character code, use space. */
2626 c = ' ';
2622 2627
2623 if (FAST_GLYPH_FACE (glyph) == 0) 2628 if (FAST_GLYPH_FACE (glyph) == 0)
2624 /* If GLYPH has no face code, use FACE. */ 2629 /* If GLYPH has no face code, use FACE. */
@@ -2634,7 +2639,7 @@ copy_part_of_rope (f, to, s, from, len, face)
2634 } 2639 }
2635 2640
2636 if (to >= s) 2641 if (to >= s)
2637 *to = FAST_MAKE_GLYPH (FAST_GLYPH_CHAR (glyph), facecode); 2642 *to = FAST_MAKE_GLYPH (c, facecode);
2638 ++to; 2643 ++to;
2639 ++fp; 2644 ++fp;
2640 } 2645 }
@@ -2757,8 +2762,10 @@ display_text_line (w, start, vpos, hpos, taboffset, ovstr_done)
2757 : default_invis_vector); 2762 : default_invis_vector);
2758 2763
2759 GLYPH truncator = (dp == 0 || !INTEGERP (DISP_TRUNC_GLYPH (dp)) 2764 GLYPH truncator = (dp == 0 || !INTEGERP (DISP_TRUNC_GLYPH (dp))
2765 || !GLYPH_CHAR_VALID_P (XINT (DISP_TRUNC_GLYPH (dp)))
2760 ? '$' : XINT (DISP_TRUNC_GLYPH (dp))); 2766 ? '$' : XINT (DISP_TRUNC_GLYPH (dp)));
2761 GLYPH continuer = (dp == 0 || !INTEGERP (DISP_CONTINUE_GLYPH (dp)) 2767 GLYPH continuer = (dp == 0 || !INTEGERP (DISP_CONTINUE_GLYPH (dp))
2768 || !GLYPH_CHAR_VALID_P (XINT (DISP_CONTINUE_GLYPH (dp)))
2762 ? '\\' : XINT (DISP_CONTINUE_GLYPH (dp))); 2769 ? '\\' : XINT (DISP_CONTINUE_GLYPH (dp)));
2763 2770
2764 /* If 1, we must handle multibyte characters. */ 2771 /* If 1, we must handle multibyte characters. */
@@ -3224,9 +3231,11 @@ display_text_line (w, start, vpos, hpos, taboffset, ovstr_done)
3224 else if (c < 0200 && ctl_arrow) 3231 else if (c < 0200 && ctl_arrow)
3225 { 3232 {
3226 if (p1 >= leftmargin) 3233 if (p1 >= leftmargin)
3227 *p1 = (fix_glyph (f, (dp && INTEGERP (DISP_CTRL_GLYPH (dp)) 3234 *p1 = (fix_glyph
3228 ? XINT (DISP_CTRL_GLYPH (dp)) : '^'), 3235 (f, (dp && INTEGERP (DISP_CTRL_GLYPH (dp))
3229 current_face) 3236 && GLYPH_CHAR_VALID_P (XINT (DISP_CTRL_GLYPH (dp)))
3237 ? XINT (DISP_CTRL_GLYPH (dp)) : '^'),
3238 current_face)
3230 | rev_dir_bit); 3239 | rev_dir_bit);
3231 p1++; 3240 p1++;
3232 if (p1 >= leftmargin && p1 < endp) 3241 if (p1 >= leftmargin && p1 < endp)
@@ -3237,9 +3246,11 @@ display_text_line (w, start, vpos, hpos, taboffset, ovstr_done)
3237 { 3246 {
3238 /* C is not a multibyte character. */ 3247 /* C is not a multibyte character. */
3239 if (p1 >= leftmargin) 3248 if (p1 >= leftmargin)
3240 *p1 = (fix_glyph (f, (dp && INTEGERP (DISP_ESCAPE_GLYPH (dp)) 3249 *p1 = (fix_glyph
3241 ? XINT (DISP_ESCAPE_GLYPH (dp)) : '\\'), 3250 (f, (dp && INTEGERP (DISP_ESCAPE_GLYPH (dp))
3242 current_face) 3251 && GLYPH_CHAR_VALID_P (DISP_ESCAPE_GLYPH (dp))
3252 ? XINT (DISP_ESCAPE_GLYPH (dp)) : '\\'),
3253 current_face)
3243 | rev_dir_bit); 3254 | rev_dir_bit);
3244 p1++; 3255 p1++;
3245 if (p1 >= leftmargin && p1 < endp) 3256 if (p1 >= leftmargin && p1 < endp)
@@ -4596,9 +4607,11 @@ display_string (w, vpos, string, length, hpos, truncate,
4596 else if (c < 0200 && ! NILP (buffer_defaults.ctl_arrow)) 4607 else if (c < 0200 && ! NILP (buffer_defaults.ctl_arrow))
4597 { 4608 {
4598 if (p1 >= start) 4609 if (p1 >= start)
4599 *p1 = fix_glyph (f, (dp && INTEGERP (DISP_CTRL_GLYPH (dp)) 4610 *p1 = (fix_glyph
4600 ? XINT (DISP_CTRL_GLYPH (dp)) : '^'), 4611 (f, (dp && INTEGERP (DISP_CTRL_GLYPH (dp))
4601 0); 4612 && GLYPH_CHAR_VALID_P (XINT (DISP_CTRL_GLYPH (dp)))
4613 ? XINT (DISP_CTRL_GLYPH (dp)) : '^'),
4614 0));
4602 p1++; 4615 p1++;
4603 if (p1 >= start && p1 < end) 4616 if (p1 >= start && p1 < end)
4604 *p1 = c ^ 0100; 4617 *p1 = c ^ 0100;
@@ -4608,9 +4621,11 @@ display_string (w, vpos, string, length, hpos, truncate,
4608 { 4621 {
4609 /* C is a control character or a binary byte data. */ 4622 /* C is a control character or a binary byte data. */
4610 if (p1 >= start) 4623 if (p1 >= start)
4611 *p1 = fix_glyph (f, (dp && INTEGERP (DISP_ESCAPE_GLYPH (dp)) 4624 *p1 = (fix_glyph
4612 ? XINT (DISP_ESCAPE_GLYPH (dp)) : '\\'), 4625 (f, (dp && INTEGERP (DISP_ESCAPE_GLYPH (dp))
4613 0); 4626 && GLYPH_CHAR_VALID_P (XINT (DISP_ESCAPE_GLYPH (dp)))
4627 ? XINT (DISP_ESCAPE_GLYPH (dp)) : '\\'),
4628 0));
4614 p1++; 4629 p1++;
4615 if (p1 >= start && p1 < end) 4630 if (p1 >= start && p1 < end)
4616 *p1 = (c >> 6) + '0'; 4631 *p1 = (c >> 6) + '0';