summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2014-05-24 22:19:27 +0300
committerEli Zaretskii <eliz@gnu.org>2014-05-24 22:19:27 +0300
commit376f53c54402c014da37c29cfd1c8ebf8e392d3c (patch)
treefc3009c43ce5426f56ea4d6cf7e19e484a9e745a /src
parent791dd8e75bf03e9910409e9b6f6f70c37aa42332 (diff)
downloademacs-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/ChangeLog6
-rw-r--r--src/xdisp.c25
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;