# HG changeset patch # User Dan Nicolaescu # Date 1278996465 25200 # Node ID 3e07e13fe30ad3d99e77f25ed756cd18ee7f2b24 # Parent 88a5b905a89545acfc94b933e8836406a9a516f7 Convert maybe_fatal to standard C. * src/lisp.h (verror): Declare. * src/eval.c (verror): New function containing the code from ... (error): ... this. Call verror. * src/term.c (vfatal): New function containing the code from ... (fatal): ... this. Call vfatal. (maybe_fatal): Convert to standard C, use variable number of arguments. Declare as non-return. (init_tty): Fix maybe_fatal call. diff -r 88a5b905a895 -r 3e07e13fe30a src/ChangeLog --- a/src/ChangeLog Mon Jul 12 12:56:46 2010 -0700 +++ b/src/ChangeLog Mon Jul 12 21:47:45 2010 -0700 @@ -1,3 +1,15 @@ +2010-07-13 Dan Nicolaescu + + Convert maybe_fatal to standard C. + * lisp.h (verror): Declare. + * eval.c (verror): New function containing the code from ... + (error): ... this. Call verror. + * term.c (vfatal): New function containing the code from ... + (fatal): ... this. Call vfatal. + (maybe_fatal): Convert to standard C, use variable number of + arguments. Declare as non-return. + (init_tty): Fix maybe_fatal call. + 2010-07-12 Dan Nicolaescu * xterm.c (x_scroll_bar_set_handle, x_scroll_bar_expose) diff -r 88a5b905a895 -r 3e07e13fe30a src/eval.c --- a/src/eval.c Mon Jul 12 12:56:46 2010 -0700 +++ b/src/eval.c Mon Jul 12 21:47:45 2010 -0700 @@ -1991,11 +1991,10 @@ return Qnil; } -/* dump an error message; called like printf */ - -/* VARARGS 1 */ + +/* dump an error message; called like vprintf */ void -error (const char *m, ...) +verror (const char *m, va_list ap) { char buf[200]; int size = 200; @@ -2009,14 +2008,8 @@ while (1) { - va_list ap; int used; - - /* A va_list can't be reused if we have to go around the loop - again; we need to "reinitialize" it each time. */ - va_start(ap, m); used = doprnt (buffer, size, m, m + mlen, ap); - va_end(ap); if (used < size) break; size *= 2; @@ -2035,6 +2028,19 @@ xsignal1 (Qerror, string); } + + +/* dump an error message; called like printf */ + +/* VARARGS 1 */ +void +error (const char *m, ...) +{ + va_list ap; + va_start (ap, m); + verror (m, ap); + va_end (ap); +} DEFUN ("commandp", Fcommandp, Scommandp, 1, 2, 0, doc: /* Non-nil if FUNCTION makes provisions for interactive calling. diff -r 88a5b905a895 -r 3e07e13fe30a src/lisp.h --- a/src/lisp.h Mon Jul 12 12:56:46 2010 -0700 +++ b/src/lisp.h Mon Jul 12 21:47:45 2010 -0700 @@ -2908,6 +2908,7 @@ extern void record_unwind_protect (Lisp_Object (*) (Lisp_Object), Lisp_Object); extern Lisp_Object unbind_to (int, Lisp_Object); extern void error (const char *, ...) NO_RETURN; +extern void verror (const char *, va_list) NO_RETURN; extern void do_autoload (Lisp_Object, Lisp_Object); extern Lisp_Object un_autoload (Lisp_Object); EXFUN (Ffetch_bytecode, 1); diff -r 88a5b905a895 -r 3e07e13fe30a src/term.c --- a/src/term.c Mon Jul 12 12:56:46 2010 -0700 +++ b/src/term.c Mon Jul 12 21:47:45 2010 -0700 @@ -101,6 +101,10 @@ static void set_tty_hooks (struct terminal *terminal); static void dissociate_if_controlling_tty (int fd); static void delete_tty (struct terminal *); +static void maybe_fatal (int must_succeed, struct terminal *terminal, + const char *str1, const char *str2, ...) NO_RETURN; +static void vfatal (const char *str, va_list ap) NO_RETURN; + #define OUTPUT(tty, a) \ emacs_tputs ((tty), a, \ @@ -3375,8 +3379,6 @@ #endif /* !DOS_NT */ } -static void maybe_fatal(); - /* Create a termcap display on the tty device with the given name and type. @@ -3748,7 +3750,7 @@ if (FrameRows (tty) < 3 || FrameCols (tty) < 3) maybe_fatal (must_succeed, terminal, - "Screen size %dx%d is too small" + "Screen size %dx%d is too small", "Screen size %dx%d is too small", FrameCols (tty), FrameRows (tty)); @@ -3924,24 +3926,39 @@ return terminal; } + +static void +vfatal (const char *str, va_list ap) +{ + fprintf (stderr, "emacs: "); + vfprintf (stderr, str, ap); + if (!(strlen (str) > 0 && str[strlen (str) - 1] == '\n')) + fprintf (stderr, "\n"); + va_end (ap); + fflush (stderr); + exit (1); +} + + /* Auxiliary error-handling function for init_tty. Delete TERMINAL, then call error or fatal with str1 or str2, respectively, according to MUST_SUCCEED. */ static void -maybe_fatal (must_succeed, terminal, str1, str2, arg1, arg2) - int must_succeed; - struct terminal *terminal; - char *str1, *str2, *arg1, *arg2; +maybe_fatal (int must_succeed, struct terminal *terminal, + const char *str1, const char *str2, ...) { + va_list ap; + va_start (ap, str2); if (terminal) delete_tty (terminal); if (must_succeed) - fatal (str2, arg1, arg2); + vfatal (str2, ap); else - error (str1, arg1, arg2); - + verror (str1, ap); + + va_end (ap); abort (); } @@ -3950,13 +3967,8 @@ { va_list ap; va_start (ap, str); - fprintf (stderr, "emacs: "); - vfprintf (stderr, str, ap); - if (!(strlen (str) > 0 && str[strlen (str) - 1] == '\n')) - fprintf (stderr, "\n"); + vfatal (str, ap); va_end (ap); - fflush (stderr); - exit (1); } diff -r 88a5b905a895 -r 3e07e13fe30a src/xterm.c --- a/src/xterm.c Mon Jul 12 12:56:46 2010 -0700 +++ b/src/xterm.c Mon Jul 12 21:47:45 2010 -0700 @@ -10183,11 +10183,9 @@ xsettings_initialize (dpyinfo); -#ifdef subprocesses /* This is only needed for distinguishing keyboard and process input. */ if (connection != 0) add_keyboard_wait_descriptor (connection); -#endif #ifdef F_SETOWN fcntl (connection, F_SETOWN, getpid ());