diff options
author | Eli Zaretskii <eliz@gnu.org> | 2014-05-24 22:19:27 +0300 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2014-05-24 22:19:27 +0300 |
commit | 376f53c54402c014da37c29cfd1c8ebf8e392d3c (patch) | |
tree | fc3009c43ce5426f56ea4d6cf7e19e484a9e745a /src | |
parent | 791dd8e75bf03e9910409e9b6f6f70c37aa42332 (diff) | |
download | emacs-376f53c54402c014da37c29cfd1c8ebf8e392d3c.tar.gz |
Fix last commits in xdisp.c, which caused a crash at startup on w32.
src/xdisp.c (safe__call): Accept va_list argument instead of '...'.
(safe_call, safe__call1): Construct a va_list argument for safe_call.
(safe_call1): Call safe_call instead of safe__call directly.
Fixes: debbugs:17577
Diffstat (limited to 'src')
-rw-r--r-- | src/ChangeLog | 6 | ||||
-rw-r--r-- | src/xdisp.c | 25 |
2 files changed, 23 insertions, 8 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index f7747c1e408..2bce5e71df8 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2014-05-24 Eli Zaretskii <eliz@gnu.org> + + * xdisp.c (safe__call): Accept va_list argument instead of '...'. + (safe_call, safe__call1): Construct a va_list argument for safe_call. + (safe_call1): Call safe_call instead of safe__call directly. + 2014-05-24 Ken Brown <kbrown@cornell.edu> * w32term.c (x_delete_display) [CYGWIN]: Don't free diff --git a/src/xdisp.c b/src/xdisp.c index 8c9884c3925..7407390d4f4 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -2592,7 +2592,7 @@ safe_eval_handler (Lisp_Object arg, ptrdiff_t nargs, Lisp_Object *args) wrong. Prevent redisplay during the evaluation. */ static Lisp_Object -safe__call (bool inhibit_quit, ptrdiff_t nargs, Lisp_Object func, ...) +safe__call (bool inhibit_quit, ptrdiff_t nargs, Lisp_Object func, va_list ap) { Lisp_Object val; @@ -2600,17 +2600,14 @@ safe__call (bool inhibit_quit, ptrdiff_t nargs, Lisp_Object func, ...) val = Qnil; else { - va_list ap; ptrdiff_t i; ptrdiff_t count = SPECPDL_INDEX (); struct gcpro gcpro1; Lisp_Object *args = alloca (nargs * word_size); args[0] = func; - va_start (ap, func); for (i = 1; i < nargs; i++) args[i] = va_arg (ap, Lisp_Object); - va_end (ap); GCPRO1 (args[0]); gcpro1.nvars = nargs; @@ -2631,7 +2628,13 @@ safe__call (bool inhibit_quit, ptrdiff_t nargs, Lisp_Object func, ...) Lisp_Object safe_call (ptrdiff_t nargs, Lisp_Object func, ...) { - return safe__call (false, nargs, func); + Lisp_Object retval; + va_list ap; + + va_start (ap, func); + retval = safe__call (false, nargs, func, ap); + va_end (ap); + return retval; } /* Call function FN with one argument ARG. @@ -2640,13 +2643,19 @@ safe_call (ptrdiff_t nargs, Lisp_Object func, ...) Lisp_Object safe_call1 (Lisp_Object fn, Lisp_Object arg) { - return safe__call (false, 2, fn, arg); + return safe_call (2, fn, arg); } Lisp_Object -safe__call1 (bool inhibit_quit, Lisp_Object fn, Lisp_Object arg) +safe__call1 (bool inhibit_quit, Lisp_Object fn, ...) { - return safe__call (inhibit_quit, 2, fn, arg); + Lisp_Object retval; + va_list ap; + + va_start (ap, fn); + retval = safe__call (inhibit_quit, 2, fn, ap); + va_end (ap); + return retval; } static Lisp_Object Qeval; |