]> code.delx.au - gnu-emacs/commitdiff
Fix last commits in xdisp.c, which caused a crash at startup on w32.
authorEli Zaretskii <eliz@gnu.org>
Sat, 24 May 2014 19:19:27 +0000 (22:19 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sat, 24 May 2014 19:19:27 +0000 (22:19 +0300)
 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
src/ChangeLog
src/xdisp.c

index f7747c1e408885573e46f0a62bf433ffc94031cf..2bce5e71df89d01cf79dbd5d5e1c3adab1e05205 100644 (file)
@@ -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
index 8c9884c3925ebfcf247c9b95f6ec8b9e47d35589..7407390d4f41c0a2486752d5df086c00901feb67 100644 (file)
@@ -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;