diff options
| author | Richard M. Stallman | 2003-08-19 23:47:31 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 2003-08-19 23:47:31 +0000 |
| commit | 3a06a6d99b0c573779862bd2b8fb7e56e8b16ccb (patch) | |
| tree | ecf1d4074600c01efa2e714bd598bd613e609707 /src/term.c | |
| parent | 5851666e1007460793baf66ec5766dbe5c097e52 (diff) | |
| download | emacs-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.c | 19 |
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 */ |