]> git.eshelyaron.com Git - emacs.git/commitdiff
(term_init): Use a buffer of size 4096 for tgetent since
authorRichard M. Stallman <rms@gnu.org>
Tue, 19 Aug 2003 23:47:31 +0000 (23:47 +0000)
committerRichard M. Stallman <rms@gnu.org>
Tue, 19 Aug 2003 23:47:31 +0000 (23:47 +0000)
FreeBSD returns something longer than 2044.  Abort if the end of
the buffer is overwritten.

src/ChangeLog
src/term.c

index 2d69bcf912bc7eea8a7b1950f3c8a0639c739b6b..bdf4541154e153e00e318b987112c76b773888a4 100644 (file)
@@ -1,3 +1,12 @@
+2003-08-19  Gerd Moellmann  <gerd@gnu.org>
+
+       * s/freebsd.h [__FreeBSD_version >= 400000]: Define TERMINFO,
+       use -lncurses.
+
+       * term.c (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.
+
 2003-08-19  Miles Bader  <miles@gnu.org>
 
        * xterm.c (x_term_init): Correctly use result of Ffile_readable_p.
index 829f2d88e6b2a141e8a2bb8bc77454f1e236fcff..66232ab204dc79088a20ba981d468df68a4642d4 100644 (file)
@@ -2159,7 +2159,8 @@ term_init (terminal_type)
 {
   char *area;
   char **address = &area;
-  char buffer[2044];
+  char *buffer = NULL;
+  const int buffer_size = 4096;
   register char *p;
   int status;
   struct frame *sf = XFRAME (selected_frame);
@@ -2171,9 +2172,6 @@ term_init (terminal_type)
 
   area = (char *) xmalloc (2044);
 
-  if (area == 0)
-    abort ();
-
   FrameRows = FRAME_LINES (sf);
   FrameCols = FRAME_COLS (sf);
   specified_window = FRAME_LINES (sf);
@@ -2202,6 +2200,7 @@ term_init (terminal_type)
 
   Wcm_clear ();
 
+  buffer = (char *) xmalloc (buffer_size);
   status = tgetent (buffer, terminal_type);
   if (status < 0)
     {
@@ -2229,13 +2228,11 @@ to do `unset TERMCAP' (C-shell: `unsetenv TERMCAP') as well.",
             terminal_type);
 #endif
     }
-#ifdef TERMINFO
-  area = (char *) xmalloc (2044);
-#else
-  area = (char *) xmalloc (strlen (buffer));
-#endif /* not TERMINFO */
-  if (area == 0)
+
+  if (strlen (buffer) >= buffer_size)
     abort ();
+  
+  area = (char *) xmalloc (strlen (buffer));
 
   TS_ins_line = tgetstr ("al", address);
   TS_ins_multi_lines = tgetstr ("AL", address);
@@ -2560,6 +2557,8 @@ to do `unset TERMCAP' (C-shell: `unsetenv TERMCAP') as well.",
   FRAME_CAN_HAVE_SCROLL_BARS (sf) = 0;
   FRAME_VERTICAL_SCROLL_BAR_TYPE (sf) = vertical_scroll_bar_none;
 #endif /* WINDOWSNT */
+
+  xfree (buffer);
 }
 
 /* VARARGS 1 */