comparison src/redisplay-gtk.c @ 851:e7ee5f8bde58

[xemacs-hg @ 2002-05-23 11:46:08 by ben] fix for raymond toy's crash, alloca crashes, some recover-session improvements files.el: Recover-session improvements: Only show session files where some files can actually be recovered, and show in chronological order. subr.el, menubar-items.el: As promised to rms, the functionality in truncate-string-with-continuation-dots has been merged into truncate-string-to-width. Change callers in menubar-items.el. select.el: Document some of these funs better. Fix problem where we were doing own-clipboard twice. Makefile.in.in: Add alloca.o. Ensure that alloca.s doesn't compile into alloca.o, but allocax.o (not that it's currently used or anything.) EmacsFrame.c, abbrev.c, alloc.c, alloca.c, callint.c, callproc.c, config.h.in, device-msw.c, device-x.c, dired.c, doc.c, editfns.c, emacs.c, emodules.c, eval.c, event-Xt.c, event-msw.c, event-stream.c, file-coding.c, fileio.c, filelock.c, fns.c, glyphs-gtk.c, glyphs-msw.c, glyphs-x.c, gui-x.c, input-method-xlib.c, intl-win32.c, lisp.h, lread.c, menubar-gtk.c, menubar-msw.c, menubar.c, mule-wnnfns.c, nt.c, objects-msw.c, process-nt.c, realpath.c, redisplay-gtk.c, redisplay-output.c, redisplay-x.c, redisplay.c, search.c, select-msw.c, sysdep.c, syswindows.h, text.c, text.h, ui-byhand.c: Fix Raymond Toy's crash. Repeat to self: 2^21 - 1 is NOT the same as (2 << 21) - 1. Fix crashes due to excessive alloca(). replace alloca() with ALLOCA(), which calls the C alloca() [which uses xmalloc()] when the size is too big. Insert in various places calls to try to flush the C alloca() stored info if there is any. Add MALLOC_OR_ALLOCA(), for places that expect to be alloca()ing large blocks. This xmalloc()s when too large and records an unwind-protect to free -- relying on the caller to unbind_to() elsewhere in the function. Use it in concat(). Use MALLOC instead of ALLOCA in select-msw.c. xemacs.mak: Add alloca.o.
author ben
date Thu, 23 May 2002 11:46:46 +0000
parents 6728e641994e
children 804517e16990
comparison
equal deleted inserted replaced
850:f915ad7befaf 851:e7ee5f8bde58
103 particular charset. Also convert the characters as necessary into 103 particular charset. Also convert the characters as necessary into
104 the format needed by XDrawImageString(), XDrawImageString16(), et 104 the format needed by XDrawImageString(), XDrawImageString16(), et
105 al. (This means converting to one or two byte format, possibly 105 al. (This means converting to one or two byte format, possibly
106 tweaking the high bits, and possibly running a CCL program.) You 106 tweaking the high bits, and possibly running a CCL program.) You
107 must pre-allocate the space used and pass it in. (This is done so 107 must pre-allocate the space used and pass it in. (This is done so
108 you can alloca() the space.) You need to allocate (2 * len) bytes 108 you can ALLOCA () the space.) You need to allocate (2 * len) bytes
109 of TEXT_STORAGE and (len * sizeof (struct textual_run)) bytes of 109 of TEXT_STORAGE and (len * sizeof (struct textual_run)) bytes of
110 RUN_STORAGE, where LEN is the length of the dynarr. 110 RUN_STORAGE, where LEN is the length of the dynarr.
111 111
112 Returns the number of runs actually used. */ 112 Returns the number of runs actually used. */
113 113
242 static int 242 static int
243 gtk_text_width (struct frame *f, struct face_cachel *cachel, CONST Emchar *str, 243 gtk_text_width (struct frame *f, struct face_cachel *cachel, CONST Emchar *str,
244 Charcount len) 244 Charcount len)
245 { 245 {
246 int width_so_far = 0; 246 int width_so_far = 0;
247 unsigned char *text_storage = (unsigned char *) alloca (2 * len); 247 unsigned char *text_storage = (unsigned char *) ALLOCA (2 * len);
248 struct textual_run *runs = alloca_array (struct textual_run, len); 248 struct textual_run *runs = alloca_array (struct textual_run, len);
249 int nruns; 249 int nruns;
250 int i; 250 int i;
251 251
252 nruns = separate_textual_runs (text_storage, runs, str, len); 252 nruns = separate_textual_runs (text_storage, runs, str, len);
682 /* Text-related variables */ 682 /* Text-related variables */
683 Lisp_Object bg_pmap; 683 Lisp_Object bg_pmap;
684 GdkGC *bgc, *gc; 684 GdkGC *bgc, *gc;
685 int height; 685 int height;
686 int len = Dynarr_length (buf); 686 int len = Dynarr_length (buf);
687 unsigned char *text_storage = (unsigned char *) alloca (2 * len); 687 unsigned char *text_storage = (unsigned char *) ALLOCA (2 * len);
688 struct textual_run *runs = alloca_array (struct textual_run, len); 688 struct textual_run *runs = alloca_array (struct textual_run, len);
689 int nruns; 689 int nruns;
690 int i; 690 int i;
691 struct face_cachel *cachel = WINDOW_FACE_CACHEL (w, findex); 691 struct face_cachel *cachel = WINDOW_FACE_CACHEL (w, findex);
692 692