diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/emacs.c | 38 | ||||
| -rw-r--r-- | src/sysdep.c | 2 |
2 files changed, 23 insertions, 17 deletions
diff --git a/src/emacs.c b/src/emacs.c index 9c93748a0f5..ad661a081b5 100644 --- a/src/emacs.c +++ b/src/emacs.c | |||
| @@ -2454,23 +2454,29 @@ shut_down_emacs (int sig, Lisp_Object stuff) | |||
| 2454 | 2454 | ||
| 2455 | /* If we are controlling the terminal, reset terminal modes. */ | 2455 | /* If we are controlling the terminal, reset terminal modes. */ |
| 2456 | #ifndef DOS_NT | 2456 | #ifndef DOS_NT |
| 2457 | { | 2457 | pid_t tpgrp = tcgetpgrp (STDIN_FILENO); |
| 2458 | pid_t pgrp = getpgrp (); | 2458 | if (tpgrp != -1 && tpgrp == getpgrp ()) |
| 2459 | pid_t tpgrp = tcgetpgrp (0); | 2459 | { |
| 2460 | if ((tpgrp != -1) && tpgrp == pgrp) | 2460 | reset_all_sys_modes (); |
| 2461 | { | 2461 | if (sig && sig != SIGTERM) |
| 2462 | reset_all_sys_modes (); | 2462 | { |
| 2463 | if (sig && sig != SIGTERM) | 2463 | static char const fmt[] = "Fatal error %d: %n%s\n"; |
| 2464 | { | 2464 | char buf[max ((sizeof fmt - sizeof "%d%n%s\n" |
| 2465 | static char const format[] = "Fatal error %d: "; | 2465 | + INT_STRLEN_BOUND (int) + 1), |
| 2466 | char buf[sizeof format - 2 + INT_STRLEN_BOUND (int)]; | 2466 | min (PIPE_BUF, MAX_ALLOCA))]; |
| 2467 | int buflen = sprintf (buf, format, sig); | 2467 | char const *sig_desc = safe_strsignal (sig); |
| 2468 | char const *sig_desc = safe_strsignal (sig); | 2468 | int nlen; |
| 2469 | int buflen = snprintf (buf, sizeof buf, fmt, sig, &nlen, sig_desc); | ||
| 2470 | if (0 <= buflen && buflen < sizeof buf) | ||
| 2469 | emacs_write (STDERR_FILENO, buf, buflen); | 2471 | emacs_write (STDERR_FILENO, buf, buflen); |
| 2470 | emacs_write (STDERR_FILENO, sig_desc, strlen (sig_desc)); | 2472 | else |
| 2471 | } | 2473 | { |
| 2472 | } | 2474 | emacs_write (STDERR_FILENO, buf, nlen); |
| 2473 | } | 2475 | emacs_write (STDERR_FILENO, sig_desc, strlen (sig_desc)); |
| 2476 | emacs_write (STDERR_FILENO, fmt + sizeof fmt - 2, 1); | ||
| 2477 | } | ||
| 2478 | } | ||
| 2479 | } | ||
| 2474 | #else | 2480 | #else |
| 2475 | fflush (stdout); | 2481 | fflush (stdout); |
| 2476 | reset_all_sys_modes (); | 2482 | reset_all_sys_modes (); |
diff --git a/src/sysdep.c b/src/sysdep.c index 9301405943b..f7478253a35 100644 --- a/src/sysdep.c +++ b/src/sysdep.c | |||
| @@ -2436,7 +2436,7 @@ emacs_backtrace (int backtrace_limit) | |||
| 2436 | 2436 | ||
| 2437 | if (npointers) | 2437 | if (npointers) |
| 2438 | { | 2438 | { |
| 2439 | emacs_write (STDERR_FILENO, "\nBacktrace:\n", 12); | 2439 | emacs_write (STDERR_FILENO, "Backtrace:\n", 11); |
| 2440 | backtrace_symbols_fd (buffer, npointers, STDERR_FILENO); | 2440 | backtrace_symbols_fd (buffer, npointers, STDERR_FILENO); |
| 2441 | if (bounded_limit < npointers) | 2441 | if (bounded_limit < npointers) |
| 2442 | emacs_write (STDERR_FILENO, "...\n", 4); | 2442 | emacs_write (STDERR_FILENO, "...\n", 4); |