comparison src/redisplay-x.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
116 particular charset. Also convert the characters as necessary into 116 particular charset. Also convert the characters as necessary into
117 the format needed by XDrawImageString(), XDrawImageString16(), et 117 the format needed by XDrawImageString(), XDrawImageString16(), et
118 al. (This means converting to one or two byte format, possibly 118 al. (This means converting to one or two byte format, possibly
119 tweaking the high bits, and possibly running a CCL program.) You 119 tweaking the high bits, and possibly running a CCL program.) You
120 must pre-allocate the space used and pass it in. (This is done so 120 must pre-allocate the space used and pass it in. (This is done so
121 you can alloca() the space.) You need to allocate (2 * len) bytes 121 you can ALLOCA () the space.) You need to allocate (2 * len) bytes
122 of TEXT_STORAGE and (len * sizeof (struct textual_run)) bytes of 122 of TEXT_STORAGE and (len * sizeof (struct textual_run)) bytes of
123 RUN_STORAGE, where LEN is the length of the dynarr. 123 RUN_STORAGE, where LEN is the length of the dynarr.
124 124
125 Returns the number of runs actually used. */ 125 Returns the number of runs actually used. */
126 126
247 static int 247 static int
248 x_text_width (struct frame *f, struct face_cachel *cachel, const Emchar *str, 248 x_text_width (struct frame *f, struct face_cachel *cachel, const Emchar *str,
249 Charcount len) 249 Charcount len)
250 { 250 {
251 int width_so_far = 0; 251 int width_so_far = 0;
252 unsigned char *text_storage = (unsigned char *) alloca (2 * len); 252 unsigned char *text_storage = (unsigned char *) ALLOCA (2 * len);
253 struct textual_run *runs = alloca_array (struct textual_run, len); 253 struct textual_run *runs = alloca_array (struct textual_run, len);
254 int nruns; 254 int nruns;
255 int i; 255 int i;
256 256
257 nruns = separate_textual_runs (text_storage, runs, str, len); 257 nruns = separate_textual_runs (text_storage, runs, str, len);
793 /* Text-related variables */ 793 /* Text-related variables */
794 Lisp_Object bg_pmap; 794 Lisp_Object bg_pmap;
795 GC bgc, gc; 795 GC bgc, gc;
796 int height; 796 int height;
797 int len = Dynarr_length (buf); 797 int len = Dynarr_length (buf);
798 unsigned char *text_storage = (unsigned char *) alloca (2 * len); 798 unsigned char *text_storage = (unsigned char *) ALLOCA (2 * len);
799 struct textual_run *runs = alloca_array (struct textual_run, len); 799 struct textual_run *runs = alloca_array (struct textual_run, len);
800 int nruns; 800 int nruns;
801 int i; 801 int i;
802 struct face_cachel *cachel = WINDOW_FACE_CACHEL (w, findex); 802 struct face_cachel *cachel = WINDOW_FACE_CACHEL (w, findex);
803 803