aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggert2023-08-06 09:08:56 -0700
committerPaul Eggert2023-08-06 09:13:12 -0700
commit1cc20535f8730f49cd5d012313c1eaf0627d7216 (patch)
treead959102c73fd9dc9b65843f1b6bf44bb8abb37e
parent400df210ce0cc1ee0113b14a5ad92764d148c620 (diff)
downloademacs-1cc20535f8730f49cd5d012313c1eaf0627d7216.tar.gz
emacs-1cc20535f8730f49cd5d012313c1eaf0627d7216.zip
Stop using printf %n
* src/emacs.c (shut_down_emacs): Don’t use printf’s "%n" format. Android, MS-Windows, and OpenBSD don’t support it, and it’s easy enough to do its equivalent by hand.
-rw-r--r--src/emacs.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/emacs.c b/src/emacs.c
index 80a013b68df..5a036554a87 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -2959,24 +2959,31 @@ shut_down_emacs (int sig, Lisp_Object stuff)
2959 reset_all_sys_modes (); 2959 reset_all_sys_modes ();
2960 if (sig && sig != SIGTERM) 2960 if (sig && sig != SIGTERM)
2961 { 2961 {
2962 static char const fmt[] = "Fatal error %d: %n%s\n";
2963#ifdef HAVE_HAIKU 2962#ifdef HAVE_HAIKU
2964 if (haiku_debug_on_fatal_error) 2963 if (haiku_debug_on_fatal_error)
2965 debugger ("Fatal error in Emacs"); 2964 debugger ("Fatal error in Emacs");
2966#endif 2965#endif
2967 char buf[max ((sizeof fmt - sizeof "%d%n%s\n" 2966 /* Output a "Fatal error NUM: DESC\n" diagnostic with a single write,
2967 but use multiple writes if the diagnosic is absurdly long
2968 and likely couldn't be written atomically anyway. */
2969 static char const fmt[] = "Fatal error %d: ";
2970 char buf[max ((sizeof fmt - sizeof "%d"
2968 + INT_STRLEN_BOUND (int) + 1), 2971 + INT_STRLEN_BOUND (int) + 1),
2969 min (PIPE_BUF, MAX_ALLOCA))]; 2972 min (PIPE_BUF, MAX_ALLOCA))];
2970 char const *sig_desc = safe_strsignal (sig); 2973 char const *sig_desc = safe_strsignal (sig);
2971 int nlen; 2974 size_t sig_desclen = strlen (sig_desc);
2972 int buflen = snprintf (buf, sizeof buf, fmt, sig, &nlen, sig_desc); 2975 int nlen = sprintf (buf, fmt, sig);
2973 if (0 <= buflen && buflen < sizeof buf) 2976 if (nlen + sig_desclen < sizeof buf - 1)
2974 emacs_write (STDERR_FILENO, buf, buflen); 2977 {
2978 char *p = mempcpy (buf + nlen, sig_desc, sig_desclen);
2979 *p++ = '\n';
2980 emacs_write (STDERR_FILENO, buf, p - buf);
2981 }
2975 else 2982 else
2976 { 2983 {
2977 emacs_write (STDERR_FILENO, buf, nlen); 2984 emacs_write (STDERR_FILENO, buf, nlen);
2978 emacs_write (STDERR_FILENO, sig_desc, strlen (sig_desc)); 2985 emacs_write (STDERR_FILENO, sig_desc, sig_desclen);
2979 emacs_write (STDERR_FILENO, fmt + sizeof fmt - 2, 1); 2986 emacs_write (STDERR_FILENO, "\n", 1);
2980 } 2987 }
2981 } 2988 }
2982 } 2989 }