# HG changeset patch # User Richard M. Stallman # Date 823465510 0 # Node ID c463c25a6806fdb1273a141940cfce0099f40df7 # Parent 9bc700f13f97b9fe7f17889b7b9d209d979cea86 (read_char_minibuf_menu_prompt): Use malloc to allocate the echo-area prompt buffer. (read_char_minibuf_menu_text, read_char_minibuf_menu_width): New variables. diff -r 9bc700f13f97 -r c463c25a6806 src/keyboard.c --- a/src/keyboard.c Sun Feb 04 20:24:09 1996 +0000 +++ b/src/keyboard.c Sun Feb 04 20:25:10 1996 +0000 @@ -5130,6 +5130,12 @@ return Qnil ; } +/* Buffer in use so far for the minibuf prompts for menu keymaps. + We make this bigger when necessary, and never free it. */ +static char *read_char_minibuf_menu_text; +/* Size of that buffer. */ +static int read_char_minibuf_menu_width; + static Lisp_Object read_char_minibuf_menu_prompt (commandflag, nmaps, maps) int commandflag ; @@ -5140,14 +5146,28 @@ register Lisp_Object name; int nlength; int width = FRAME_WIDTH (selected_frame) - 4; - char *menu = (char *) alloca (width + 4); int idx = -1; int nobindings = 1; Lisp_Object rest, vector; + char *menu; if (! menu_prompting) return Qnil; + /* Make sure we have a big enough buffer for the menu text. */ + if (read_char_minibuf_menu_text == 0) + { + read_char_minibuf_menu_width = width + 4; + read_char_minibuf_menu_text = (char *) xmalloc (width + 4); + } + else if (width + 4 > read_char_minibuf_menu_width) + { + read_char_minibuf_menu_width = width + 4; + read_char_minibuf_menu_text + = (char *) xrealloc (read_char_minibuf_menu_text, width + 4); + } + menu = read_char_minibuf_menu_text; + /* Get the menu name from the first map that has one (a prompt string). */ for (mapno = 0; mapno < nmaps; mapno++) {