aboutsummaryrefslogtreecommitdiffstats
path: root/src/buffer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/buffer.c')
-rw-r--r--src/buffer.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/buffer.c b/src/buffer.c
index 45e614fb449..7a6ddfa719d 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -3053,13 +3053,15 @@ mouse_face_overlay_overlaps (Lisp_Object overlay)
3053 ptrdiff_t end = OVERLAY_POSITION (OVERLAY_END (overlay)); 3053 ptrdiff_t end = OVERLAY_POSITION (OVERLAY_END (overlay));
3054 ptrdiff_t n, i, size; 3054 ptrdiff_t n, i, size;
3055 Lisp_Object *v, tem; 3055 Lisp_Object *v, tem;
3056 Lisp_Object vbuf[10];
3057 USE_SAFE_ALLOCA;
3056 3058
3057 size = 10; 3059 size = ARRAYELTS (vbuf);
3058 v = alloca (size * sizeof *v); 3060 v = vbuf;
3059 n = overlays_in (start, end, 0, &v, &size, NULL, NULL); 3061 n = overlays_in (start, end, 0, &v, &size, NULL, NULL);
3060 if (n > size) 3062 if (n > size)
3061 { 3063 {
3062 v = alloca (n * sizeof *v); 3064 SAFE_NALLOCA (v, 1, n);
3063 overlays_in (start, end, 0, &v, &n, NULL, NULL); 3065 overlays_in (start, end, 0, &v, &n, NULL, NULL);
3064 } 3066 }
3065 3067
@@ -3069,6 +3071,7 @@ mouse_face_overlay_overlaps (Lisp_Object overlay)
3069 !NILP (tem))) 3071 !NILP (tem)))
3070 break; 3072 break;
3071 3073
3074 SAFE_FREE ();
3072 return i < n; 3075 return i < n;
3073} 3076}
3074 3077
@@ -4517,13 +4520,13 @@ report_overlay_modification (Lisp_Object start, Lisp_Object end, bool after,
4517 First copy the vector contents, in case some of these hooks 4520 First copy the vector contents, in case some of these hooks
4518 do subsequent modification of the buffer. */ 4521 do subsequent modification of the buffer. */
4519 ptrdiff_t size = last_overlay_modification_hooks_used; 4522 ptrdiff_t size = last_overlay_modification_hooks_used;
4520 Lisp_Object *copy = alloca (size * sizeof *copy); 4523 Lisp_Object *copy;
4521 ptrdiff_t i; 4524 ptrdiff_t i;
4522 4525
4526 USE_SAFE_ALLOCA;
4527 SAFE_ALLOCA_LISP (copy, size);
4523 memcpy (copy, XVECTOR (last_overlay_modification_hooks)->contents, 4528 memcpy (copy, XVECTOR (last_overlay_modification_hooks)->contents,
4524 size * word_size); 4529 size * word_size);
4525 gcpro1.var = copy;
4526 gcpro1.nvars = size;
4527 4530
4528 for (i = 0; i < size;) 4531 for (i = 0; i < size;)
4529 { 4532 {
@@ -4532,6 +4535,8 @@ report_overlay_modification (Lisp_Object start, Lisp_Object end, bool after,
4532 overlay_i = copy[i++]; 4535 overlay_i = copy[i++];
4533 call_overlay_mod_hooks (prop_i, overlay_i, after, arg1, arg2, arg3); 4536 call_overlay_mod_hooks (prop_i, overlay_i, after, arg1, arg2, arg3);
4534 } 4537 }
4538
4539 SAFE_FREE ();
4535 } 4540 }
4536 UNGCPRO; 4541 UNGCPRO;
4537} 4542}