diff options
author | Dmitry Antipov <dmantipov@yandex.ru> | 2014-07-14 08:44:01 +0400 |
---|---|---|
committer | Dmitry Antipov <dmantipov@yandex.ru> | 2014-07-14 08:44:01 +0400 |
commit | 201b685783301c9acfda413d1860763f0e941601 (patch) | |
tree | c16759bbe8c1e4a6ddea7f783e55c0710f00f0a5 /src/macros.c | |
parent | a705278de7c661af9b78d956af25e13055cba864 (diff) | |
download | emacs-201b685783301c9acfda413d1860763f0e941601.tar.gz emacs-201b685783301c9acfda413d1860763f0e941601.tar.bz2 emacs-201b685783301c9acfda413d1860763f0e941601.zip |
* 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.
Diffstat (limited to 'src/macros.c')
-rw-r--r-- | src/macros.c | 26 |
1 files changed, 11 insertions, 15 deletions
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)); |