aboutsummaryrefslogtreecommitdiffstats
path: root/src/term.c
diff options
context:
space:
mode:
authorRichard M. Stallman2003-08-19 23:47:31 +0000
committerRichard M. Stallman2003-08-19 23:47:31 +0000
commit3a06a6d99b0c573779862bd2b8fb7e56e8b16ccb (patch)
treeecf1d4074600c01efa2e714bd598bd613e609707 /src/term.c
parent5851666e1007460793baf66ec5766dbe5c097e52 (diff)
downloademacs-3a06a6d99b0c573779862bd2b8fb7e56e8b16ccb.tar.gz
emacs-3a06a6d99b0c573779862bd2b8fb7e56e8b16ccb.zip
(term_init): Use a buffer of size 4096 for tgetent since
FreeBSD returns something longer than 2044. Abort if the end of the buffer is overwritten.
Diffstat (limited to 'src/term.c')
-rw-r--r--src/term.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/src/term.c b/src/term.c
index 829f2d88e6b..66232ab204d 100644
--- a/src/term.c
+++ b/src/term.c
@@ -2159,7 +2159,8 @@ term_init (terminal_type)
2159{ 2159{
2160 char *area; 2160 char *area;
2161 char **address = &area; 2161 char **address = &area;
2162 char buffer[2044]; 2162 char *buffer = NULL;
2163 const int buffer_size = 4096;
2163 register char *p; 2164 register char *p;
2164 int status; 2165 int status;
2165 struct frame *sf = XFRAME (selected_frame); 2166 struct frame *sf = XFRAME (selected_frame);
@@ -2171,9 +2172,6 @@ term_init (terminal_type)
2171 2172
2172 area = (char *) xmalloc (2044); 2173 area = (char *) xmalloc (2044);
2173 2174
2174 if (area == 0)
2175 abort ();
2176
2177 FrameRows = FRAME_LINES (sf); 2175 FrameRows = FRAME_LINES (sf);
2178 FrameCols = FRAME_COLS (sf); 2176 FrameCols = FRAME_COLS (sf);
2179 specified_window = FRAME_LINES (sf); 2177 specified_window = FRAME_LINES (sf);
@@ -2202,6 +2200,7 @@ term_init (terminal_type)
2202 2200
2203 Wcm_clear (); 2201 Wcm_clear ();
2204 2202
2203 buffer = (char *) xmalloc (buffer_size);
2205 status = tgetent (buffer, terminal_type); 2204 status = tgetent (buffer, terminal_type);
2206 if (status < 0) 2205 if (status < 0)
2207 { 2206 {
@@ -2229,13 +2228,11 @@ to do `unset TERMCAP' (C-shell: `unsetenv TERMCAP') as well.",
2229 terminal_type); 2228 terminal_type);
2230#endif 2229#endif
2231 } 2230 }
2232#ifdef TERMINFO 2231
2233 area = (char *) xmalloc (2044); 2232 if (strlen (buffer) >= buffer_size)
2234#else
2235 area = (char *) xmalloc (strlen (buffer));
2236#endif /* not TERMINFO */
2237 if (area == 0)
2238 abort (); 2233 abort ();
2234
2235 area = (char *) xmalloc (strlen (buffer));
2239 2236
2240 TS_ins_line = tgetstr ("al", address); 2237 TS_ins_line = tgetstr ("al", address);
2241 TS_ins_multi_lines = tgetstr ("AL", address); 2238 TS_ins_multi_lines = tgetstr ("AL", address);
@@ -2560,6 +2557,8 @@ to do `unset TERMCAP' (C-shell: `unsetenv TERMCAP') as well.",
2560 FRAME_CAN_HAVE_SCROLL_BARS (sf) = 0; 2557 FRAME_CAN_HAVE_SCROLL_BARS (sf) = 0;
2561 FRAME_VERTICAL_SCROLL_BAR_TYPE (sf) = vertical_scroll_bar_none; 2558 FRAME_VERTICAL_SCROLL_BAR_TYPE (sf) = vertical_scroll_bar_none;
2562#endif /* WINDOWSNT */ 2559#endif /* WINDOWSNT */
2560
2561 xfree (buffer);
2563} 2562}
2564 2563
2565/* VARARGS 1 */ 2564/* VARARGS 1 */