From 201b685783301c9acfda413d1860763f0e941601 Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Mon, 14 Jul 2014 08:44:01 +0400 Subject: * lisp.h (CHECK_VECTOR_OR_STRING): Return number of elements or characters in string, respectively. Add comment. * fringe.c (Fdefine_fringe_bitmap): * fns.c (Fsubstring, substring_both): Use it. * keymap.c (Fdefine_key, Flookup_key): * macros.c (Fstart_kbd_macro): Likewise. Avoid call to Flength. --- src/macros.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) (limited to 'src/macros.c') diff --git a/src/macros.c b/src/macros.c index acba125edc5..c73986abd34 100644 --- a/src/macros.c +++ b/src/macros.c @@ -80,28 +80,24 @@ macro before appending to it. */) } else { - ptrdiff_t i; - EMACS_INT len; + const ptrdiff_t incr = 30; + ptrdiff_t i, len; bool cvt; /* Check the type of last-kbd-macro in case Lisp code changed it. */ - CHECK_VECTOR_OR_STRING (KVAR (current_kboard, Vlast_kbd_macro)); + len = CHECK_VECTOR_OR_STRING (KVAR (current_kboard, Vlast_kbd_macro)); - len = XINT (Flength (KVAR (current_kboard, Vlast_kbd_macro))); + if (INT_ADD_OVERFLOW (len, incr)) + memory_full (SIZE_MAX); /* Copy last-kbd-macro into the buffer, in case the Lisp code has put another macro there. */ - if (current_kboard->kbd_macro_bufsize < len + 30) - { - if (PTRDIFF_MAX < MOST_POSITIVE_FIXNUM + 30 - && PTRDIFF_MAX < len + 30) - memory_full (SIZE_MAX); - current_kboard->kbd_macro_buffer = - xpalloc (current_kboard->kbd_macro_buffer, - ¤t_kboard->kbd_macro_bufsize, - len + 30 - current_kboard->kbd_macro_bufsize, -1, - sizeof *current_kboard->kbd_macro_buffer); - } + if (current_kboard->kbd_macro_bufsize < len + incr) + current_kboard->kbd_macro_buffer = + xpalloc (current_kboard->kbd_macro_buffer, + ¤t_kboard->kbd_macro_bufsize, + len + incr - current_kboard->kbd_macro_bufsize, -1, + sizeof *current_kboard->kbd_macro_buffer); /* Must convert meta modifier when copying string to vector. */ cvt = STRINGP (KVAR (current_kboard, Vlast_kbd_macro)); -- cgit v1.2.3