>From 3739f4b6821435c9feb74b098e95f668d604c768 Mon Sep 17 00:00:00 2001
From: Paul Eggert
Date: Mon, 1 Jul 2019 09:46:11 -0700
Subject: [PATCH 1/4] New function errprintf for printf to stderr
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This doesnât change behavior; it just simplifies callers a bit
and makes further changes easier.
* src/alloc.c (mark_memory, test_setjmp, die):
* src/bidi.c (bidi_dump_cached_states):
* src/buffer.c (mmap_free_1, mmap_enlarge, mmap_alloc)
(init_buffer):
* src/charset.c (init_charset):
* src/dispextern.h (TRACE):
* src/dispnew.c (Fdump_redisplay_history)
(init_display_interactive):
* src/emacs-module.c (module_abort):
* src/emacs.c (main, sort_args, Fdump_emacs):
* src/gmalloc.c (mabort):
* src/gtkutil.c (my_log_handler, xg_set_geometry)
(xg_create_widget):
* src/image.c (convert_mono_to_color_image):
* src/lread.c (dir_warning):
* src/nsfont.m (ns_descriptor_to_entity, ns_findfonts)
(nsfont_list_family, nsfont_open, ns_uni_to_glyphs)
(ns_glyph_metrics, ns_dump_glyphstring):
* src/nsmenu.m (ns_update_menubar):
* src/nsterm.h (NSTRACE_MSG_NO_DASHES):
* src/nsterm.m (ns_mouse_position, ns_default, ns_term_init)
(sendEvent:, keyDown:, performDragOperation:, mouseDown:):
* src/pdumper.c (dump_trace, dump_fingerprint)
(print_paths_to_root_1, Fdump_emacs_portable):
* src/print.c (debug_print, safe_debug_print):
* src/regex-emacs.c (DEBUG_PRINT, debug_putchar)
(print_fastmap, print_partial_compiled_pattern)
(print_compiled_pattern, print_double_string, regex_compile):
* src/region-cache.c (pp_cache):
* src/systhread.c (sys_mutex_init, sys_cond_init):
* src/term.c (vfatal):
* src/unexaix.c (CHECK_SCNHDR):
* src/unexelf.c (DEBUG_LOG, unexec):
* src/unexhp9k800.c (read_header):
* src/unexmacosx.c (unexec_error):
* src/widget.c (EmacsFrameInitialize):
* src/xdisp.c (TRACE_MOVE, pos_visible_p, message_to_stderr)
(vmessage, debug_method_add, dump_glyph, dump_glyph_row)
(Fdump_glyph_matrix, dump_glyph_string, expose_window)
(expose_frame):
* src/xfaces.c (Fdump_colors, dump_realized_face)
(Fdump_face, Fshow_face_resources):
* src/xfns.c (print_fontset_result):
* src/xmenu.c (x_menu_show) [XDEBUG]:
* src/xrdb.c (fatal):
* src/xselect.c (TRACE0, TRACE1, TRACE2, TRACE3)
(x_clipboard_manager_error_2):
* src/xsmfns.c (x_session_initialize):
* src/xterm.c (x_trace_wire, x_connection_closed)
(my_log_handler, x_initialize):
Prefer the new functions to using fprintf etc. to stderr.
All files changed to include sysstdio.h instead if stdio.h
if they werenât doing so already.
* src/dispextern.h (TRACE):
* src/xdisp.c (TRACE_MOVE):
All callers changed to omit stderr, since macro now arranges
for stderr itself.
* src/sysdep.c (errputc, errputs, errprintf, verrprintf):
New functions.
---
src/alloc.c | 12 +-
src/bidi.c | 24 ++--
src/buffer.c | 16 +--
src/charset.c | 2 +-
src/dispnew.c | 13 +-
src/emacs-module.c | 8 +-
src/emacs.c | 57 ++++----
src/gmalloc.c | 2 +-
src/gtkutil.c | 9 +-
src/image.c | 2 +-
src/lread.c | 2 +-
src/nsfont.m | 41 +++---
src/nsmenu.m | 12 +-
src/nsterm.h | 11 +-
src/nsterm.m | 27 ++--
src/pdumper.c | 34 +++--
src/print.c | 8 +-
src/regex-emacs.c | 134 +++++++++----------
src/region-cache.c | 15 +--
src/sysdep.c | 29 ++++
src/sysstdio.h | 5 +
src/systhread.c | 7 +-
src/term.c | 6 +-
src/unexaix.c | 7 +-
src/unexelf.c | 8 +-
src/unexhp9k800.c | 2 +-
src/unexmacosx.c | 6 +-
src/widget.c | 3 +-
src/xdisp.c | 324 ++++++++++++++++++++++-----------------------
src/xfaces.c | 64 ++++-----
src/xfns.c | 6 +-
src/xmenu.c | 2 +-
src/xrdb.c | 2 +-
src/xselect.c | 12 +-
src/xsmfns.c | 6 +-
src/xterm.c | 15 +--
36 files changed, 473 insertions(+), 460 deletions(-)
diff --git a/src/alloc.c b/src/alloc.c
index 64aaa8acdf..9610f01c05 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -22,7 +22,6 @@ Copyright (C) 1985-1986, 1988, 1993-1995, 1997-2019 Free Software
#include
#include
-#include
#include
#include /* For CHAR_BIT. */
#include /* For SIGABRT, SIGDANGER. */
@@ -38,6 +37,7 @@ Copyright (C) 1985-1986, 1988, 1993-1995, 1997-2019 Free Software
#include "ptr-bounds.h"
#include "puresize.h"
#include "sheap.h"
+#include "sysstdio.h"
#include "systime.h"
#include "character.h"
#include "buffer.h"
@@ -4717,7 +4717,7 @@ mark_memory (void const *start, void const *end)
Lisp_Object obj = build_string ("test");
struct Lisp_String *s = XSTRING (obj);
garbage_collect ();
- fprintf (stderr, "test '%s'\n", s->u.s.data);
+ errprintf ("test '%s'\n", s->u.s.data);
return Qnil;
}
@@ -4813,10 +4813,10 @@ test_setjmp (void)
taking place, or the setjmp just didn't save the register. */
if (x == 1)
- fprintf (stderr, SETJMP_WILL_LIKELY_WORK);
+ errputs (SETJMP_WILL_LIKELY_WORK);
else
{
- fprintf (stderr, SETJMP_WILL_NOT_WORK);
+ errputs (SETJMP_WILL_NOT_WORK);
exit (1);
}
}
@@ -7189,8 +7189,8 @@ DEFUN ("suspicious-object", Fsuspicious_object, Ssuspicious_object, 1, 1, 0,
void
die (const char *msg, const char *file, int line)
{
- fprintf (stderr, "\r\n%s:%d: Emacs fatal error: assertion failed: %s\r\n",
- file, line, msg);
+ errprintf ("\r\n%s:%d: Emacs fatal error: assertion failed: %s\r\n",
+ file, line, msg);
terminate_due_to_signal (SIGABRT, INT_MAX);
}
diff --git a/src/bidi.c b/src/bidi.c
index c530d49c10..991894c4e0 100644
--- a/src/bidi.c
+++ b/src/bidi.c
@@ -238,13 +238,13 @@ Copyright (C) 2000-2001, 2004-2005, 2009-2019 Free Software Foundation, Inc.
necessary. */
#include
-#include
#include "lisp.h"
#include "character.h"
#include "buffer.h"
#include "dispextern.h"
#include "region-cache.h"
+#include "sysstdio.h"
static bool bidi_initialized = 0;
@@ -3586,24 +3586,22 @@ bidi_dump_cached_states (void)
if (bidi_cache_idx == 0)
{
- fprintf (stderr, "The cache is empty.\n");
+ errputs ("The cache is empty.\n");
return;
}
- fprintf (stderr, "Total of %"pD"d state%s in cache:\n",
- bidi_cache_idx, bidi_cache_idx == 1 ? "" : "s");
+ errprintf ("Total of %"pD"d state%s in cache:\n",
+ bidi_cache_idx, bidi_cache_idx == 1 ? "" : "s");
for (i = bidi_cache[bidi_cache_idx - 1].charpos; i > 0; i /= 10)
ndigits++;
- fputs ("ch ", stderr);
+ errputs ("ch ");
for (i = 0; i < bidi_cache_idx; i++)
- fprintf (stderr, "%*c", ndigits, bidi_cache[i].ch);
- fputs ("\n", stderr);
- fputs ("lvl ", stderr);
+ errprintf ("%*c", ndigits, bidi_cache[i].ch);
+ errputs ("\nlvl ");
for (i = 0; i < bidi_cache_idx; i++)
- fprintf (stderr, "%*d", ndigits, bidi_cache[i].resolved_level);
- fputs ("\n", stderr);
- fputs ("pos ", stderr);
+ errprintf ("%*d", ndigits, bidi_cache[i].resolved_level);
+ errputs ("\npos ");
for (i = 0; i < bidi_cache_idx; i++)
- fprintf (stderr, "%*"pD"d", ndigits, bidi_cache[i].charpos);
- fputs ("\n", stderr);
+ errprintf ("%*"pD"d", ndigits, bidi_cache[i].charpos);
+ errputc ('\n');
}
diff --git a/src/buffer.c b/src/buffer.c
index 209e29f0f1..14477d4ae1 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -24,7 +24,6 @@ Copyright (C) 1985-1989, 1993-1995, 1997-2019 Free Software Foundation,
#include
#include
#include
-#include
#include
#include
@@ -33,6 +32,7 @@ Copyright (C) 1985-1989, 1993-1995, 1997-2019 Free Software Foundation,
#include "lisp.h"
#include "intervals.h"
#include "process.h"
+#include "sysstdio.h"
#include "systime.h"
#include "window.h"
#include "commands.h"
@@ -4781,7 +4781,7 @@ mmap_free_1 (struct mmap_region *r)
mmap_regions = r->next;
if (munmap (r, r->nbytes_mapped) == -1)
- fprintf (stderr, "munmap: %s\n", emacs_strerror (errno));
+ errprintf ("munmap: %s\n", emacs_strerror (errno));
}
@@ -4800,7 +4800,7 @@ mmap_enlarge (struct mmap_region *r, int npages)
/* Unmap pages at the end of the region. */
nbytes = - npages * mmap_page_size;
if (munmap (region_end - nbytes, nbytes) == -1)
- fprintf (stderr, "munmap: %s\n", emacs_strerror (errno));
+ errprintf ("munmap: %s\n", emacs_strerror (errno));
else
{
r->nbytes_mapped -= nbytes;
@@ -4822,14 +4822,14 @@ mmap_enlarge (struct mmap_region *r, int npages)
p = mmap (region_end, nbytes, PROT_READ | PROT_WRITE,
MAP_ANON | MAP_PRIVATE | MAP_FIXED, mmap_fd, 0);
if (p == MAP_FAILED)
- ; /* fprintf (stderr, "mmap: %s\n", emacs_strerror (errno)); */
+ ; /* errprintf ("mmap: %s\n", emacs_strerror (errno)); */
else if (p != region_end)
{
/* Kernels are free to choose a different address. In
that case, unmap what we've mapped above; we have
no use for it. */
if (munmap (p, nbytes) == -1)
- fprintf (stderr, "munmap: %s\n", emacs_strerror (errno));
+ errprintf ("munmap: %s\n", emacs_strerror (errno));
}
else
{
@@ -4867,7 +4867,7 @@ mmap_alloc (void **var, size_t nbytes)
if (p == MAP_FAILED)
{
if (errno != ENOMEM)
- fprintf (stderr, "mmap: %s\n", emacs_strerror (errno));
+ errprintf ("mmap: %s\n", emacs_strerror (errno));
p = NULL;
}
else
@@ -5378,8 +5378,8 @@ init_buffer (void)
if (!pwd)
{
- fprintf (stderr, "Error getting directory: %s\n",
- emacs_strerror (errno));
+ errprintf ("Error getting directory: %s\n",
+ emacs_strerror (errno));
bset_directory (current_buffer, Qnil);
}
else
diff --git a/src/charset.c b/src/charset.c
index c0700f972e..f2efc7946a 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -2293,7 +2293,7 @@ init_charset (void)
/* This used to be non-fatal (dir_warning), but it should not
happen, and if it does sooner or later it will cause some
obscure problem (eg bug#6401), so better abort. */
- fprintf (stderr, "Error: charsets directory not found:\n\
+ errprintf ("Error: charsets directory not found:\n\
%s\n\
Emacs will not function correctly without the character map files.\n%s\
Please check your installation!\n",
diff --git a/src/dispnew.c b/src/dispnew.c
index 52a7b6d6ee..28f0c49c0b 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -220,7 +220,7 @@ DEFUN ("dump-redisplay-history", Fdump_redisplay_history,
{
if (i < 0)
i = REDISPLAY_HISTORY_SIZE - 1;
- fprintf (stderr, "%s\n", redisplay_history[i].trace);
+ errprintf ("%s\n", redisplay_history[i].trace);
}
return Qnil;
@@ -6153,8 +6153,7 @@ init_display_interactive (void)
if (display_arg && !x_display_ok (display))
{
- fprintf (stderr, "Display %s unavailable, simulating -nw\n",
- display);
+ errprintf ("Display %s unavailable, simulating -nw\n", display);
inhibit_window_system = 1;
}
}
@@ -6204,12 +6203,14 @@ init_display_interactive (void)
#endif
if (!terminal_type)
{
+ char const *msg = ("Please set the environment variable "
+ "TERM; see 'tset'.");
#ifdef HAVE_WINDOW_SYSTEM
if (! inhibit_window_system)
- fprintf (stderr, "Please set the environment variable DISPLAY or TERM (see 'tset').\n");
- else
+ msg = ("Please set the environment variable "
+ "DISPLAY or TERM (see 'tset').");
#endif /* HAVE_WINDOW_SYSTEM */
- fprintf (stderr, "Please set the environment variable TERM; see 'tset'.\n");
+ errprintf ("%s\n", msg);
exit (1);
}
diff --git a/src/emacs-module.c b/src/emacs-module.c
index c856663d2f..7faad14adc 100644
--- a/src/emacs-module.c
+++ b/src/emacs-module.c
@@ -81,7 +81,6 @@ #define EMACS_MODULE_GMP
#include
#include
#include
-#include
#include
#include
@@ -91,6 +90,7 @@ #define EMACS_MODULE_GMP
#include "coding.h"
#include "keyboard.h"
#include "syssignal.h"
+#include "sysstdio.h"
#include "thread.h"
#include
@@ -1299,12 +1299,12 @@ value_storage_contains_p (const struct emacs_value_storage *storage,
static AVOID ATTRIBUTE_FORMAT_PRINTF (1, 2)
module_abort (const char *format, ...)
{
- fputs ("Emacs module assertion: ", stderr);
+ errputs ("Emacs module assertion: ");
va_list args;
va_start (args, format);
- vfprintf (stderr, format, args);
+ verrprintf (format, args);
va_end (args);
- fputc ('\n', stderr);
+ errputc ('\n');
fflush (NULL);
emacs_abort ();
}
diff --git a/src/emacs.c b/src/emacs.c
index 32bb57e272..4fd45497fc 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -1145,12 +1145,12 @@ main (int argc, char **argv)
tem2 = Fsymbol_value (intern_c_string ("emacs-copyright"));
if (!STRINGP (tem))
{
- fprintf (stderr, "Invalid value of 'emacs-version'\n");
+ errputs ("Invalid value of 'emacs-version'\n");
exit (1);
}
if (!STRINGP (tem2))
{
- fprintf (stderr, "Invalid value of 'emacs-copyright'\n");
+ errputs ("Invalid value of 'emacs-copyright'\n");
exit (1);
}
else
@@ -1192,8 +1192,8 @@ main (int argc, char **argv)
#endif
if (chdir (ch_to_dir) != 0)
{
- fprintf (stderr, "%s: Can't chdir to %s: %s\n",
- argv[0], ch_to_dir, strerror (errno));
+ errprintf ("%s: Can't chdir to %s: %s\n",
+ argv[0], ch_to_dir, strerror (errno));
exit (1);
}
original_pwd = emacs_wd;
@@ -1317,15 +1317,15 @@ main (int argc, char **argv)
!= STDOUT_FILENO))
{
char *errstring = strerror (errno);
- fprintf (stderr, "%s: %s: %s\n", argv[0], term, errstring);
+ errprintf ("%s: %s: %s\n", argv[0], term, errstring);
exit (EXIT_FAILURE);
}
if (! isatty (STDIN_FILENO))
{
- fprintf (stderr, "%s: %s: not a tty\n", argv[0], term);
+ errprintf ("%s: %s: not a tty\n", argv[0], term);
exit (EXIT_FAILURE);
}
- fprintf (stderr, "Using %s\n", term);
+ errprintf ("Using %s\n", term);
#ifdef HAVE_WINDOW_SYSTEM
inhibit_window_system = true; /* -t => -nw */
#endif
@@ -1422,7 +1422,7 @@ main (int argc, char **argv)
before exiting. */
if (emacs_pipe (daemon_pipe) != 0)
{
- fprintf (stderr, "Cannot pipe!\n");
+ errputs ("Cannot pipe!\n");
exit (1);
}
} /* daemon_type == 2 */
@@ -1432,8 +1432,7 @@ main (int argc, char **argv)
int systemd_socket = sd_listen_fds (1);
if (systemd_socket > 1)
- fprintf (stderr,
- ("\n"
+ errputs (("\n"
"Warning: systemd passed more than one socket to Emacs.\n"
"Try 'Accept=false' in the Emacs socket unit file.\n"));
else if (systemd_socket == 1
@@ -1443,7 +1442,7 @@ main (int argc, char **argv)
#endif /* HAVE_LIBSYSTEMD */
#ifdef USE_GTK
- fprintf (stderr, "\nWarning: due to a long standing Gtk+ bug\nhttps://gitlab.gnome.org/GNOME/gtk/issues/221\n\
+ errputs ("\nWarning: due to a long standing Gtk+ bug\nhttps://gitlab.gnome.org/GNOME/gtk/issues/221\n\
Emacs might crash when run in daemon mode and the X11 connection is unexpectedly lost.\n\
Using an Emacs configured with --with-x-toolkit=lucid does not have this problem.\n");
#endif /* USE_GTK */
@@ -1477,12 +1476,12 @@ main (int argc, char **argv)
if (retval < 0)
{
- fprintf (stderr, "Error reading status from child\n");
+ errputs ("Error reading status from child\n");
exit (1);
}
else if (retval == 0)
{
- fprintf (stderr, "Error: server did not start correctly\n");
+ errputs ("Error: server did not start correctly\n");
exit (1);
}
@@ -1508,7 +1507,7 @@ main (int argc, char **argv)
if (! (0 <= fdStrlen && fdStrlen < sizeof fdStr))
{
- fprintf (stderr, "daemon: child name too long\n");
+ errputs ("daemon: child name too long\n");
exit (EXIT_CANNOT_INVOKE);
}
@@ -1525,7 +1524,7 @@ main (int argc, char **argv)
if (!dname_arg || !*dname_arg || strnlen (dname_arg, 71) == 71
|| !strchr (dname_arg, '\n'))
{
- fprintf (stderr, "emacs daemon: daemon name absent or too long\n");
+ errputs ("emacs daemon: daemon name absent or too long\n");
exit (EXIT_CANNOT_INVOKE);
}
dname_arg2[0] = '\0';
@@ -1546,12 +1545,12 @@ main (int argc, char **argv)
w32_daemon_event = CreateEvent (NULL, TRUE, FALSE, W32_DAEMON_EVENT);
if (w32_daemon_event == NULL)
{
- fprintf (stderr, "Couldn't create MS-Windows event for daemon: %s\n",
- w32_strerror (0));
+ errprintf ("Couldn't create MS-Windows event for daemon: %s\n",
+ w32_strerror (0));
exit (1);
}
#else /* MSDOS */
- fprintf (stderr, "This platform does not support daemon mode.\n");
+ errputs ("This platform does not support daemon mode.\n");
exit (1);
#endif /* MSDOS */
if (dname_arg)
@@ -1662,7 +1661,7 @@ main (int argc, char **argv)
NULL, &skip_args);
if (will_dump_p () && module_assertions)
{
- fputs ("Module assertions are not supported during dumping\n", stderr);
+ errputs ("Module assertions are not supported during dumping\n");
exit (1);
}
init_module_assertions (module_assertions);
@@ -2329,7 +2328,9 @@ sort_args (int argc, char **argv)
{
/* This is an internal error.
Eg if one long option is a prefix of another. */
- fprintf (stderr, "Option '%s' matched multiple standard arguments\n", argv[from]);
+ errprintf
+ ("Option '%s' matched multiple standard arguments\n",
+ argv[from]);
}
/* Should we not also warn if there was no match? */
}
@@ -2566,14 +2567,14 @@ DEFUN ("dump-emacs", Fdump_emacs, Sdump_emacs, 2, 2, 0,
if (heap_bss_diff > MAX_HEAP_BSS_DIFF)
{
- fprintf (stderr, "**************************************************\n");
- fprintf (stderr, "Warning: Your system has a gap between BSS and the\n");
- fprintf (stderr, "heap (%"pMu" bytes). This usually means that exec-shield\n",
- heap_bss_diff);
- fprintf (stderr, "or something similar is in effect. The dump may\n");
- fprintf (stderr, "fail because of this. See the section about\n");
- fprintf (stderr, "exec-shield in etc/PROBLEMS for more information.\n");
- fprintf (stderr, "**************************************************\n");
+ errprintf (("**************************************************\n"
+ "Warning: Your system has a gap between BSS and the\n"
+ "heap (%"pMu" bytes). This usually means that exec-shield\n"
+ "or something similar is in effect. The dump may\n"
+ "fail because of this. See the section about\n"
+ "exec-shield in etc/PROBLEMS for more information.\n"
+ "**************************************************\n"),
+ heap_bss_diff);
}
# endif
diff --git a/src/gmalloc.c b/src/gmalloc.c
index bac3ffb7e5..57ebe12d3c 100644
--- a/src/gmalloc.c
+++ b/src/gmalloc.c
@@ -2012,7 +2012,7 @@ mabort (enum mcheck_status status)
#ifdef __GNU_LIBRARY__
__libc_fatal (msg);
#else
- fprintf (stderr, "mcheck: %s\n", msg);
+ errprintf ("mcheck: %s\n", msg);
emacs_abort ();
#endif
}
diff --git a/src/gtkutil.c b/src/gtkutil.c
index 1d15aec253..3c8447a0c4 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -21,13 +21,13 @@ Copyright (C) 2003-2019 Free Software Foundation, Inc.
#ifdef USE_GTK
#include
-#include
#include
#include "lisp.h"
#include "dispextern.h"
#include "frame.h"
+#include "sysstdio.h"
#include "systime.h"
#include "xterm.h"
#include "blockinput.h"
@@ -829,7 +829,7 @@ my_log_handler (const gchar *log_domain, GLogLevelFlags log_level,
const gchar *msg, gpointer user_data)
{
if (!strstr (msg, "visible children"))
- fprintf (stderr, "XX %s-WARNING **: %s\n", log_domain, msg);
+ errprintf ("XX %s-WARNING **: %s\n", log_domain, msg);
}
#endif
@@ -894,7 +894,7 @@ xg_set_geometry (struct frame *f)
if (!gtk_window_parse_geometry (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
geom_str))
- fprintf (stderr, "Failed to parse: '%s'\n", geom_str);
+ errprintf ("Failed to parse: '%s'\n", geom_str);
g_log_remove_handler ("Gtk", id);
}
@@ -2850,8 +2850,7 @@ xg_create_widget (const char *type, const char *name, struct frame *f,
}
else
{
- fprintf (stderr, "bad type in xg_create_widget: %s, doing nothing\n",
- type);
+ errprintf ("bad type in xg_create_widget: %s, doing nothing\n", type);
}
return w;
diff --git a/src/image.c b/src/image.c
index d44a9d3dc2..864f73f8ef 100644
--- a/src/image.c
+++ b/src/image.c
@@ -3335,7 +3335,7 @@ convert_mono_to_color_image (struct frame *f, struct image *img,
DeleteDC (new_img_dc);
DeleteObject (img->pixmap);
if (new_pixmap == 0)
- fprintf (stderr, "Failed to convert image to color.\n");
+ errputs ("Failed to convert image to color.\n");
else
img->pixmap = new_pixmap;
}
diff --git a/src/lread.c b/src/lread.c
index 5fa90cad3f..da8dd774dc 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -4721,7 +4721,7 @@ dir_warning (char const *use, Lisp_Object dirname)
{
static char const format[] = "Warning: %s '%s': %s\n";
char *diagnostic = emacs_strerror (errno);
- fprintf (stderr, format, use, SSDATA (ENCODE_SYSTEM (dirname)), diagnostic);
+ errprintf (format, use, SSDATA (ENCODE_SYSTEM (dirname)), diagnostic);
/* Don't log the warning before we've initialized!! */
if (initialized)
diff --git a/src/nsfont.m b/src/nsfont.m
index eca97ab86c..0bda357e3a 100644
--- a/src/nsfont.m
+++ b/src/nsfont.m
@@ -212,7 +212,7 @@ static void ns_glyph_metrics (struct nsfont_info *font_info,
if (NSFONT_TRACE)
{
- fprintf (stderr, "created font_entity:\n ");
+ errputs ("created font_entity:\n ");
debug_print (font_entity);
}
@@ -313,7 +313,7 @@ static void ns_glyph_metrics (struct nsfont_info *font_info,
if (*bytes1 == 0) // *bytes1 & *bytes2 != *bytes2
off++;
}
- // fprintf(stderr, "off = %d\ttot = %d\n", off,tot);
+ // errprintf ("off = %d\ttot = %d\n", off,tot);
return (float)off / tot < 1.0F - pct;
}
@@ -542,8 +542,8 @@ but also for ascii (which causes unnecessary font substitution). */
block_input ();
if (NSFONT_TRACE)
{
- fprintf (stderr, "nsfont: %s for fontspec:\n ",
- (isMatch ? "match" : "list"));
+ errprintf ("nsfont: %s for fontspec:\n ",
+ (isMatch ? "match" : "list"));
debug_print (font_spec);
}
@@ -596,8 +596,8 @@ but also for ascii (which causes unnecessary font substitution). */
return ns_fallback_entity ();
if (NSFONT_TRACE)
- fprintf (stderr, " Returning %"pD"d entities.\n",
- list_length (list));
+ errprintf (" Returning %"pD"d entities.\n",
+ list_length (list));
return list;
}
@@ -668,8 +668,8 @@ Properties to be considered are same as for list(). */
/* FIXME: escape the name? */
if (NSFONT_TRACE)
- fprintf (stderr, "nsfont: list families returning %"pD"d entries\n",
- list_length (list));
+ errprintf ("nsfont: list families returning %"pD"d entries\n",
+ list_length (list));
unblock_input ();
return list;
@@ -698,7 +698,7 @@ Properties to be considered are same as for list(). */
if (NSFONT_TRACE)
{
- fprintf (stderr, "nsfont: open size %d of fontentity:\n ", pixel_size);
+ errprintf ("nsfont: open size %d of fontentity:\n ", pixel_size);
debug_print (font_entity);
}
@@ -1272,8 +1272,8 @@ is false when (FROM > 0 || TO < S->nchars). */
unsigned short *glyphs;
if (NSFONT_TRACE)
- fprintf (stderr, "%p\tFinding glyphs for glyphs in block %d\n",
- font_info, block);
+ errprintf ("%p\tFinding glyphs for glyphs in block %d\n",
+ font_info, block);
block_input ();
@@ -1348,8 +1348,8 @@ is false when (FROM > 0 || TO < S->nchars). */
struct font_metrics *metrics;
if (NSFONT_TRACE)
- fprintf (stderr, "%p\tComputing metrics for glyphs in block %d\n",
- font_info, block);
+ errprintf ("%p\tComputing metrics for glyphs in block %d\n",
+ font_info, block);
#ifdef NS_IMPL_GNUSTEP
/* not implemented yet (as of startup 0.18), so punt */
@@ -1472,16 +1472,13 @@ - (void)setIntAttribute: (NSInteger)attributeTag value: (NSInteger)val
{
int i;
- fprintf (stderr, "Glyph string len = %d at (%d, %d) overhang (%d, %d),"
-"overlap = %d, bg_filled = %d:",
- s->nchars, s->x, s->y, s->left_overhang, s->right_overhang,
- s->row->overlapping_p, s->background_filled_p);
+ errprintf (("Glyph string len = %d at (%d, %d) overhang (%d, %d),"
+ "overlap = %d, bg_filled = %d:"),
+ s->nchars, s->x, s->y, s->left_overhang, s->right_overhang,
+ s->row->overlapping_p, s->background_filled_p);
for (i =0; inchars; i++)
- {
- int c = s->first_glyph[i].u.ch;
- fprintf (stderr, "%c", c);
- }
- fprintf (stderr, "\n");
+ errputc (s->first_glyph[i].u.ch);
+ errputc ('\n');
}
static void syms_of_nsfont_for_pdumper (void);
diff --git a/src/nsmenu.m b/src/nsmenu.m
index 817f8cff18..099f20bb0d 100644
--- a/src/nsmenu.m
+++ b/src/nsmenu.m
@@ -119,7 +119,7 @@
if (f != SELECTED_FRAME ())
return;
XSETFRAME (Vmenu_updating_frame, f);
-/*fprintf (stderr, "ns_update_menubar: frame: %p\tdeep: %d\tsub: %p\n", f, deep_p, submenu); */
+/*errprintf ("ns_update_menubar: frame: %p\tdeep: %d\tsub: %p\n", f, deep_p, submenu); */
block_input ();
pool = [[NSAutoreleasePool alloc] init];
@@ -236,8 +236,8 @@
if (submenu && n == 0)
{
/* should have found a menu for this one but didn't */
- fprintf (stderr, "ERROR: did not find lisp menu for submenu '%s'.\n",
- [[submenu title] UTF8String]);
+ errprintf ("ERROR: did not find lisp menu for submenu '%s'.\n",
+ [[submenu title] UTF8String]);
discard_menu_items ();
unbind_to (specpdl_count, Qnil);
[pool release];
@@ -292,7 +292,7 @@
#if NSMENUPROFILE
ftime (&tb);
t += 1000*tb.time+tb.millitm;
- fprintf (stderr, "NO CHANGE! CUTTING OUT after %ld msec.\n", t);
+ errprintf ("NO CHANGE! CUTTING OUT after %ld msec.\n", t);
#endif
free_menubar_widget_value_tree (first_wv);
@@ -447,7 +447,7 @@
#if NSMENUPROFILE
ftime (&tb);
t += 1000*tb.time+tb.millitm;
- fprintf (stderr, "Menu update took %ld msec.\n", t);
+ errprintf ("Menu update took %ld msec.\n", t);
#endif
/* set main menu */
@@ -581,7 +581,7 @@ - (void)menuNeedsUpdate: (NSMenu *)menu
*/
if (trackingMenu == 0)
return;
-/*fprintf (stderr, "Updating menu '%s'\n", [[self title] UTF8String]); NSLog (@"%@\n", event); */
+/*errprintf ("Updating menu '%s'\n", [[self title] UTF8String]); NSLog (@"%@\n", event); */
#ifdef NS_IMPL_GNUSTEP
/* Don't know how to do this for anything other than Mac OS X 10.5 and later.
This is wrong, as it might run Lisp code in the event loop. */
diff --git a/src/nsterm.h b/src/nsterm.h
index 567f462ec6..7e15b9cd34 100644
--- a/src/nsterm.h
+++ b/src/nsterm.h
@@ -23,6 +23,7 @@
#include "character.h"
#include "font.h"
#include "sysselect.h"
+#include "sysstdio.h"
#ifdef HAVE_NS
#ifdef __OBJC__
@@ -176,11 +177,11 @@ #define NSTRACE_MSG_NO_DASHES(...) \
{ \
if (nstrace_enabled) \
{ \
- fprintf (stderr, "%-10s:%5d: [%5d]%.*s", \
- __FILE__, __LINE__, nstrace_num++, \
- 2*nstrace_depth, " | | | | | | | | | | | | | | | .."); \
- fprintf (stderr, __VA_ARGS__); \
- fprintf (stderr, "\n"); \
+ errprintf ("%-10s:%5d: [%5d]%.*s", \
+ __FILE__, __LINE__, nstrace_num++, \
+ 2*nstrace_depth, " | | | | | | | | | | | | | | | .."); \
+ errprintf (__VA_ARGS__); \
+ errputc ('\n'); \
} \
} \
while(0)
diff --git a/src/nsterm.m b/src/nsterm.m
index bc1c7860aa..91eab1b0d2 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -2121,7 +2121,7 @@ so some key presses (TAB) are swallowed by the system. */
color_table->colors[idx] = color;
[color retain];
- /* fprintf(stderr, "color_table: allocated %d\n",idx); */
+ /* errprintf ("color_table: allocated %d\n", idx); */
return idx;
}
@@ -2466,7 +2466,7 @@ so some key presses (TAB) are swallowed by the system. */
if (*fp == NULL)
{
- fprintf (stderr, "Warning: ns_mouse_position () called with null *fp.\n");
+ errputs ("Warning: ns_mouse_position () called with null *fp.\n");
return;
}
@@ -5032,8 +5032,8 @@ static Lisp_Object ns_string_to_lispmod (const char *s)
*result = make_float (f);
else if (is_modstring && value)
*result = ns_string_to_lispmod (value);
- else fprintf (stderr,
- "Bad value for default \"%s\": \"%s\"\n", parameter, value);
+ else
+ errprintf ("Bad value for default \"%s\": \"%s\"\n", parameter, value);
}
}
@@ -5222,8 +5222,7 @@ static Lisp_Object ns_new_font (struct frame *f, Lisp_Object font_object,
{
if (emacs_pipe (selfds) != 0)
{
- fprintf (stderr, "Failed to create pipe: %s\n",
- emacs_strerror (errno));
+ errprintf ("Failed to create pipe: %s\n", emacs_strerror (errno));
emacs_abort ();
}
@@ -5613,7 +5612,7 @@ - (void)sendEvent: (NSEvent *)theEvent
if (type == NSEventTypeCursorUpdate && window == nil)
{
- fprintf (stderr, "Dropping external cursor update event.\n");
+ errputs ("Dropping external cursor update event.\n");
return;
}
@@ -6288,8 +6287,8 @@ In that case we use UCKeyTranslate (ns_get_shifted_character)
emacs_event->modifiers ^= parse_solitary_modifier (ns_function_modifier);
if (NS_KEYLOG)
- fprintf (stderr, "keyDown: code =%x\tfnKey =%x\tflags = %x\tmods = %x\n",
- code, fnKeysym, flags, emacs_event->modifiers);
+ errprintf ("keyDown: code =%x\tfnKey =%x\tflags = %x\tmods = %x\n",
+ code, fnKeysym, flags, emacs_event->modifiers);
/* If it was a function key or had control-like modifiers, pass
it directly to Emacs. */
@@ -6333,7 +6332,7 @@ In that case we use UCKeyTranslate (ns_get_shifted_character)
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/EventOverview/HandlingKeyEvents/HandlingKeyEvents.html. */
if (NS_KEYLOG && !processingCompose)
- fprintf (stderr, "keyDown: Begin compose sequence.\n");
+ errputs ("keyDown: Begin compose sequence.\n");
/* FIXME: interpretKeyEvents doesnât seem to send insertText if â is
used as shift-like modifier, at least on El Capitan. Mask it
@@ -8291,7 +8290,7 @@ -(BOOL)performDragOperation: (id ) sender
}
else
{
- fprintf (stderr, "Invalid data type in dragging pasteboard\n");
+ errputs ("Invalid data type in dragging pasteboard\n");
return NO;
}
@@ -9035,8 +9034,8 @@ - (void)mouseDown: (NSEvent *)e
case NSScrollerKnobSlot: /* GNUstep-only */
last_hit_part = scroll_bar_move_ratio; break;
default: /* NSScrollerNoPart? */
- fprintf (stderr, "EmacsScroller-mouseDown: unexpected part %ld\n",
- (long) part);
+ errprintf ("EmacsScroller-mouseDown: unexpected part %ld\n",
+ (long) part);
return;
}
@@ -9319,7 +9318,7 @@ Convert an X font name (XLFD) to an NS font name.
name[i+1] = c_toupper (name[i+1]);
}
}
- /* fprintf (stderr, "converted '%s' to '%s'\n",xlfd,name); */
+ /* errprintf ("converted '%s' to '%s'\n", xlfd, name); */
ret = [[NSString stringWithUTF8String: name] UTF8String];
xfree (name);
return ret;
diff --git a/src/pdumper.c b/src/pdumper.c
index c00f8a0af5..bfa0dba7f0 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -23,7 +23,6 @@
#include
#include
#include
-#include
#include
#include
#include
@@ -42,6 +41,7 @@
#include "lisp.h"
#include "pdumper.h"
#include "window.h"
+#include "sysstdio.h"
#include "systime.h"
#include "thread.h"
#include "bignum.h"
@@ -158,7 +158,7 @@ dump_trace (const char *fmt, ...)
{
va_list args;
va_start (args, fmt);
- vfprintf (stderr, fmt, args);
+ verrprintf (fmt, args);
va_end (args);
}
}
@@ -326,10 +326,10 @@ dump_reloc_set_offset (struct dump_reloc *reloc, dump_off offset)
static void
dump_fingerprint (const char *label, unsigned char const *xfingerprint)
{
- fprintf (stderr, "%s: ", label);
+ errprintf ("%s: ", label);
for (int i = 0; i < 32; ++i)
- fprintf (stderr, "%02x", (unsigned) xfingerprint[i]);
- fprintf (stderr, "\n");
+ errprintf ("%02x", (unsigned) xfingerprint[i]);
+ errputc ('\n');
}
/* Format of an Emacs portable dump file. All offsets are relative to
@@ -1403,10 +1403,9 @@ print_paths_to_root_1 (struct dump_context *ctx,
Lisp_Object referrer = XCAR (referrers);
referrers = XCDR (referrers);
Lisp_Object repr = Fprin1_to_string (referrer, Qnil);
- for (int i = 0; i < level; ++i)
- fputc (' ', stderr);
+ errprintf ("%*s", level, "");
fwrite (SDATA (repr), 1, SBYTES (repr), stderr);
- fputc ('\n', stderr);
+ errputc ('\n');
print_paths_to_root_1 (ctx, referrer, level + 1);
}
}
@@ -4226,16 +4225,15 @@ DEFUN ("dump-emacs-portable",
dump_seek (ctx, 0);
dump_write (ctx, &ctx->header, sizeof (ctx->header));
- fprintf (stderr, "Dump complete\n");
- fprintf (stderr,
- "Byte counts: header=%lu hot=%lu discardable=%lu cold=%lu\n",
- (unsigned long) (header_end - header_start),
- (unsigned long) (hot_end - hot_start),
- (unsigned long) (discardable_end - ctx->header.discardable_start),
- (unsigned long) (cold_end - ctx->header.cold_start));
- fprintf (stderr, "Reloc counts: hot=%u discardable=%u\n",
- number_hot_relocations,
- number_discardable_relocations);
+ errputs ("Dump complete\n");
+ errprintf ("Byte counts: header=%lu hot=%lu discardable=%lu cold=%lu\n",
+ (unsigned long) (header_end - header_start),
+ (unsigned long) (hot_end - hot_start),
+ (unsigned long) (discardable_end - ctx->header.discardable_start),
+ (unsigned long) (cold_end - ctx->header.cold_start));
+ errprintf ("Reloc counts: hot=%u discardable=%u\n",
+ number_hot_relocations,
+ number_discardable_relocations);
unblock_input ();
return unbind_to (count, Qnil);
diff --git a/src/print.c b/src/print.c
index 406abbf4a3..df45cb27ce 100644
--- a/src/print.c
+++ b/src/print.c
@@ -840,7 +840,7 @@ DEFUN ("redirect-debugging-output", Fredirect_debugging_output, Sredirect_debugg
debug_print (Lisp_Object arg)
{
Fprin1 (arg, Qexternal_debugging_output);
- fprintf (stderr, "\r\n");
+ errputs ("\r\n");
}
void safe_debug_print (Lisp_Object) EXTERNALLY_VISIBLE;
@@ -854,9 +854,9 @@ safe_debug_print (Lisp_Object arg)
else
{
EMACS_UINT n = XLI (arg);
- fprintf (stderr, "#<%s_LISP_OBJECT 0x%08"pI"x>\r\n",
- !valid ? "INVALID" : "SOME",
- n);
+ errprintf ("#<%s_LISP_OBJECT 0x%08"pI"x>\r\n",
+ !valid ? "INVALID" : "SOME",
+ n);
}
}
diff --git a/src/regex-emacs.c b/src/regex-emacs.c
index ac9f91dacb..83850b8b7d 100644
--- a/src/regex-emacs.c
+++ b/src/regex-emacs.c
@@ -442,7 +442,7 @@ #define CHARSET_RANGE_TABLE_END(range_table, count) \
# define DEBUG_STATEMENT(e) e
# define DEBUG_PRINT(...) \
- if (regex_emacs_debug > 0) fprintf (stderr, __VA_ARGS__)
+ if (regex_emacs_debug > 0) errprintf (__VA_ARGS__)
# define DEBUG_COMPILES_ARGUMENTS
# define DEBUG_PRINT_COMPILED_PATTERN(p, s, e) \
if (regex_emacs_debug > 0) print_partial_compiled_pattern (s, e)
@@ -453,11 +453,11 @@ #define CHARSET_RANGE_TABLE_END(range_table, count) \
debug_putchar (int c)
{
if (c >= 32 && c <= 126)
- fputc (c, stderr);
+ errputc (c);
else
{
unsigned int uc = c;
- fprintf (stderr, "{%02x}", uc);
+ errprintf ("{%02x}", uc);
}
}
@@ -482,12 +482,12 @@ print_fastmap (char *fastmap)
}
if (was_a_range)
{
- fprintf (stderr, "-");
+ errputs ("-");
debug_putchar (i - 1);
}
}
}
- fputc ('\n', stderr);
+ errputc ('\n');
}
@@ -503,50 +503,50 @@ print_partial_compiled_pattern (re_char *start, re_char *end)
if (start == NULL)
{
- fprintf (stderr, "(null)\n");
+ errputs ("(null)\n");
return;
}
/* Loop over pattern commands. */
while (p < pend)
{
- fprintf (stderr, "%td:\t", p - start);
+ errprintf ("%td:\t", p - start);
switch ((re_opcode_t) *p++)
{
case no_op:
- fprintf (stderr, "/no_op");
+ errputs ("/no_op");
break;
case succeed:
- fprintf (stderr, "/succeed");
+ errputs ("/succeed");
break;
case exactn:
mcnt = *p++;
- fprintf (stderr, "/exactn/%d", mcnt);
+ errprintf ("/exactn/%d", mcnt);
do
{
- fprintf (stderr, "/");
+ errputc ('/');
debug_putchar (*p++);
}
while (--mcnt);
break;
case start_memory:
- fprintf (stderr, "/start_memory/%d", *p++);
+ errprintf ("/start_memory/%d", *p++);
break;
case stop_memory:
- fprintf (stderr, "/stop_memory/%d", *p++);
+ errprintf ("/stop_memory/%d", *p++);
break;
case duplicate:
- fprintf (stderr, "/duplicate/%d", *p++);
+ errprintf ("/duplicate/%d", *p++);
break;
case anychar:
- fprintf (stderr, "/anychar");
+ errputs ("/anychar");
break;
case charset:
@@ -557,11 +557,11 @@ print_partial_compiled_pattern (re_char *start, re_char *end)
int length = CHARSET_BITMAP_SIZE (p - 1);
bool has_range_table = CHARSET_RANGE_TABLE_EXISTS_P (p - 1);
- fprintf (stderr, "/charset [%s",
- (re_opcode_t) *(p - 1) == charset_not ? "^" : "");
+ errprintf ("/charset [%s",
+ (re_opcode_t) *(p - 1) == charset_not ? "^" : "");
if (p + *p >= pend)
- fprintf (stderr, " !extends past end of pattern! ");
+ errputs (" !extends past end of pattern! ");
for (c = 0; c < 256; c++)
if (c / 8 < length
@@ -570,7 +570,7 @@ print_partial_compiled_pattern (re_char *start, re_char *end)
/* Are we starting a range? */
if (last + 1 == c && ! in_range)
{
- fprintf (stderr, "-");
+ errputc ('-');
in_range = true;
}
/* Have we broken a range? */
@@ -589,14 +589,14 @@ print_partial_compiled_pattern (re_char *start, re_char *end)
if (in_range)
debug_putchar (last);
- fprintf (stderr, "]");
+ errputc (']');
p += 1 + length;
if (has_range_table)
{
int count;
- fprintf (stderr, "has-range-table");
+ errputs ("has-range-table");
/* ??? Should print the range table; for now, just skip it. */
p += 2; /* skip range table bits */
@@ -607,136 +607,136 @@ print_partial_compiled_pattern (re_char *start, re_char *end)
break;
case begline:
- fprintf (stderr, "/begline");
+ errputs ("/begline");
break;
case endline:
- fprintf (stderr, "/endline");
+ errputs ("/endline");
break;
case on_failure_jump:
EXTRACT_NUMBER_AND_INCR (mcnt, p);
- fprintf (stderr, "/on_failure_jump to %td", p + mcnt - start);
+ errprintf ("/on_failure_jump to %td", p + mcnt - start);
break;
case on_failure_keep_string_jump:
EXTRACT_NUMBER_AND_INCR (mcnt, p);
- fprintf (stderr, "/on_failure_keep_string_jump to %td",
- p + mcnt - start);
+ errprintf ("/on_failure_keep_string_jump to %td",
+ p + mcnt - start);
break;
case on_failure_jump_nastyloop:
EXTRACT_NUMBER_AND_INCR (mcnt, p);
- fprintf (stderr, "/on_failure_jump_nastyloop to %td",
- p + mcnt - start);
+ errprintf ("/on_failure_jump_nastyloop to %td",
+ p + mcnt - start);
break;
case on_failure_jump_loop:
EXTRACT_NUMBER_AND_INCR (mcnt, p);
- fprintf (stderr, "/on_failure_jump_loop to %td",
- p + mcnt - start);
+ errprintf ("/on_failure_jump_loop to %td",
+ p + mcnt - start);
break;
case on_failure_jump_smart:
EXTRACT_NUMBER_AND_INCR (mcnt, p);
- fprintf (stderr, "/on_failure_jump_smart to %td",
- p + mcnt - start);
+ errprintf ("/on_failure_jump_smart to %td",
+ p + mcnt - start);
break;
case jump:
EXTRACT_NUMBER_AND_INCR (mcnt, p);
- fprintf (stderr, "/jump to %td", p + mcnt - start);
+ errprintf ("/jump to %td", p + mcnt - start);
break;
case succeed_n:
EXTRACT_NUMBER_AND_INCR (mcnt, p);
EXTRACT_NUMBER_AND_INCR (mcnt2, p);
- fprintf (stderr, "/succeed_n to %td, %d times",
- p - 2 + mcnt - start, mcnt2);
+ errprintf ("/succeed_n to %td, %d times",
+ p - 2 + mcnt - start, mcnt2);
break;
case jump_n:
EXTRACT_NUMBER_AND_INCR (mcnt, p);
EXTRACT_NUMBER_AND_INCR (mcnt2, p);
- fprintf (stderr, "/jump_n to %td, %d times",
- p - 2 + mcnt - start, mcnt2);
+ errprintf ("/jump_n to %td, %d times",
+ p - 2 + mcnt - start, mcnt2);
break;
case set_number_at:
EXTRACT_NUMBER_AND_INCR (mcnt, p);
EXTRACT_NUMBER_AND_INCR (mcnt2, p);
- fprintf (stderr, "/set_number_at location %td to %d",
- p - 2 + mcnt - start, mcnt2);
+ errprintf ("/set_number_at location %td to %d",
+ p - 2 + mcnt - start, mcnt2);
break;
case wordbound:
- fprintf (stderr, "/wordbound");
+ errputs ("/wordbound");
break;
case notwordbound:
- fprintf (stderr, "/notwordbound");
+ errputs ("/notwordbound");
break;
case wordbeg:
- fprintf (stderr, "/wordbeg");
+ errputs ("/wordbeg");
break;
case wordend:
- fprintf (stderr, "/wordend");
+ errputs ("/wordend");
break;
case symbeg:
- fprintf (stderr, "/symbeg");
+ errputs ("/symbeg");
break;
case symend:
- fprintf (stderr, "/symend");
+ errputs ("/symend");
break;
case syntaxspec:
- fprintf (stderr, "/syntaxspec");
+ errputs ("/syntaxspec");
mcnt = *p++;
- fprintf (stderr, "/%d", mcnt);
+ errprintf ("/%d", mcnt);
break;
case notsyntaxspec:
- fprintf (stderr, "/notsyntaxspec");
+ errputs ("/notsyntaxspec");
mcnt = *p++;
- fprintf (stderr, "/%d", mcnt);
+ errprintf ("/%d", mcnt);
break;
case at_dot:
- fprintf (stderr, "/at_dot");
+ errputs ("/at_dot");
break;
case categoryspec:
- fprintf (stderr, "/categoryspec");
+ errputs ("/categoryspec");
mcnt = *p++;
- fprintf (stderr, "/%d", mcnt);
+ errprintf ("/%d", mcnt);
break;
case notcategoryspec:
- fprintf (stderr, "/notcategoryspec");
+ errputs ("/notcategoryspec");
mcnt = *p++;
- fprintf (stderr, "/%d", mcnt);
+ errprintf ("/%d", mcnt);
break;
case begbuf:
- fprintf (stderr, "/begbuf");
+ errputs ("/begbuf");
break;
case endbuf:
- fprintf (stderr, "/endbuf");
+ errputs ("/endbuf");
break;
default:
- fprintf (stderr, "?%d", *(p-1));
+ errprintf ("?%d", *(p-1));
}
- fprintf (stderr, "\n");
+ errputc ('\n');
}
- fprintf (stderr, "%td:\tend of pattern.\n", p - start);
+ errprintf ("%td:\tend of pattern.\n", p - start);
}
@@ -746,18 +746,18 @@ print_compiled_pattern (struct re_pattern_buffer *bufp)
re_char *buffer = bufp->buffer;
print_partial_compiled_pattern (buffer, buffer + bufp->used);
- fprintf (stderr, "%td bytes used/%td bytes allocated.\n",
- bufp->used, bufp->allocated);
+ errprintf ("%td bytes used/%td bytes allocated.\n",
+ bufp->used, bufp->allocated);
if (bufp->fastmap_accurate && bufp->fastmap)
{
- fprintf (stderr, "fastmap: ");
+ errputs ("fastmap: ");
print_fastmap (bufp->fastmap);
}
- fprintf (stderr, "re_nsub: %td\t", bufp->re_nsub);
- fprintf (stderr, "regs_alloc: %d\t", bufp->regs_allocated);
- fprintf (stderr, "can_be_null: %d\n", bufp->can_be_null);
+ errprintf ("re_nsub: %td\t", bufp->re_nsub);
+ errprintf ("regs_alloc: %d\t", bufp->regs_allocated);
+ errprintf ("can_be_null: %d\n", bufp->can_be_null);
fflush (stderr);
/* Perhaps we should print the translate table? */
}
@@ -768,7 +768,7 @@ print_double_string (re_char *where, re_char *string1, ptrdiff_t size1,
re_char *string2, ptrdiff_t size2)
{
if (where == NULL)
- fprintf (stderr, "(null)");
+ errputs ("(null)");
else
{
int i;
@@ -1751,7 +1751,7 @@ regex_compile (re_char *pattern, ptrdiff_t size,
{
for (ptrdiff_t debug_count = 0; debug_count < size; debug_count++)
debug_putchar (pattern[debug_count]);
- fputc ('\n', stderr);
+ errputc ('\n');
}
#endif
diff --git a/src/region-cache.c b/src/region-cache.c
index 57a26f2fa6..51604e815f 100644
--- a/src/region-cache.c
+++ b/src/region-cache.c
@@ -762,19 +762,18 @@ pp_cache (struct region_cache *c)
ptrdiff_t beg_u = c->buffer_beg + c->beg_unchanged;
ptrdiff_t end_u = c->buffer_end - c->end_unchanged;
- fprintf (stderr,
- "basis: %"pD"d..%"pD"d modified: %"pD"d..%"pD"d\n",
- c->buffer_beg, c->buffer_end,
- beg_u, end_u);
+ errprintf ("basis: %"pD"d..%"pD"d modified: %"pD"d..%"pD"d\n",
+ c->buffer_beg, c->buffer_end,
+ beg_u, end_u);
for (ptrdiff_t i = 0; i < c->cache_len; i++)
{
ptrdiff_t pos = BOUNDARY_POS (c, i);
- fprintf (stderr, "%c%c%"pD"d : %d\n",
- pos < beg_u ? 'v' : pos == beg_u ? '-' : ' ',
- pos > end_u ? '^' : pos == end_u ? '-' : ' ',
- pos, BOUNDARY_VALUE (c, i));
+ errprintf ("%c%c%"pD"d : %d\n",
+ pos < beg_u ? 'v' : pos == beg_u ? '-' : ' ',
+ pos > end_u ? '^' : pos == end_u ? '-' : ' ',
+ pos, BOUNDARY_VALUE (c, i));
}
}
diff --git a/src/sysdep.c b/src/sysdep.c
index 4f89e8aba1..beccc3c537 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -2767,6 +2767,35 @@ safe_strsignal (int code)
return signame;
}
+
+/* Output to stderr. */
+
+void
+errputc (int c)
+{
+ fputc_unlocked (c, stderr);
+}
+
+void
+errputs (char const *str)
+{
+ fputs_unlocked (str, stderr);
+}
+
+void
+errprintf (char const *fmt, ...)
+{
+ va_list ap;
+ va_start (ap, fmt);
+ verrprintf (fmt, ap);
+ va_end (ap);
+}
+
+void
+verrprintf (char const *fmt, va_list ap)
+{
+ vfprintf (stderr, fmt, ap);
+}
#ifndef DOS_NT
/* For make-serial-process */
diff --git a/src/sysstdio.h b/src/sysstdio.h
index 3ff1d6a572..ebe0845d40 100644
--- a/src/sysstdio.h
+++ b/src/sysstdio.h
@@ -25,6 +25,11 @@ #define EMACS_SYSSTDIO_H
extern FILE *emacs_fopen (char const *, char const *);
+extern void errputc (int);
+extern void errputs (char const *);
+extern void errprintf (char const *, ...) ATTRIBUTE_FORMAT_PRINTF (1, 2);
+extern void verrprintf (char const *, va_list) ATTRIBUTE_FORMAT_PRINTF (1, 0);
+
#if O_BINARY
# define FOPEN_BINARY "b"
# define FOPEN_TEXT "t"
diff --git a/src/systhread.c b/src/systhread.c
index 6f4de536fb..ef57c0e8b3 100644
--- a/src/systhread.c
+++ b/src/systhread.c
@@ -18,9 +18,10 @@ Copyright (C) 2012-2019 Free Software Foundation, Inc.
#include
#include
-#include
#include
+
#include "lisp.h"
+#include "sysstdio.h"
#ifdef HAVE_NS
#include "nsterm.h"
@@ -122,7 +123,7 @@ sys_mutex_init (sys_mutex_t *mutex)
/* We could get ENOMEM. Can't do anything except aborting. */
if (error != 0)
{
- fprintf (stderr, "\npthread_mutex_init failed: %s\n", strerror (error));
+ errprintf ("\npthread_mutex_init failed: %s\n", strerror (error));
emacs_abort ();
}
#ifdef ENABLE_CHECKING
@@ -152,7 +153,7 @@ sys_cond_init (sys_cond_t *cond)
/* We could get ENOMEM. Can't do anything except aborting. */
if (error != 0)
{
- fprintf (stderr, "\npthread_cond_init failed: %s\n", strerror (error));
+ errprintf ("\npthread_cond_init failed: %s\n", strerror (error));
emacs_abort ();
}
}
diff --git a/src/term.c b/src/term.c
index 8b5a710d80..5b9c010520 100644
--- a/src/term.c
+++ b/src/term.c
@@ -4398,10 +4398,10 @@ init_tty (const char *name, const char *terminal_type, bool must_succeed)
static void
vfatal (const char *str, va_list ap)
{
- fprintf (stderr, "emacs: ");
- vfprintf (stderr, str, ap);
+ errputs ("emacs: ");
+ verrprintf (str, ap);
if (! (str[0] && str[strlen (str) - 1] == '\n'))
- fprintf (stderr, "\n");
+ errputc ('\n');
exit (1);
}
diff --git a/src/unexaix.c b/src/unexaix.c
index 349d365383..a273ba1adb 100644
--- a/src/unexaix.c
+++ b/src/unexaix.c
@@ -225,12 +225,11 @@ make_hdr (int new, int a_out,
#define CHECK_SCNHDR(ptr, name, flags) \
if (strcmp (s->s_name, name) == 0) { \
if (s->s_flags != flags) { \
- fprintf (stderr, "unexec: %lx flags where %x expected in %s section.\n", \
- (unsigned long)s->s_flags, flags, name); \
+ errprintf ("unexec: %lx flags where %x expected in %s section.\n", \
+ (unsigned long) s->s_flags, flags, name); \
} \
if (ptr) { \
- fprintf (stderr, "unexec: duplicate section header for section %s.\n", \
- name); \
+ errprintf ("unexec: duplicate section header for section %s.\n", name); \
} \
ptr = s; \
}
diff --git a/src/unexelf.c b/src/unexelf.c
index 6d19bf1fb9..d09a5f5aac 100644
--- a/src/unexelf.c
+++ b/src/unexelf.c
@@ -187,7 +187,7 @@ verify ((! TYPE_SIGNED (ElfW (Half))
&& TYPE_MAXIMUM (ElfW (Half)) <= PTRDIFF_MAX);
#ifdef UNEXELF_DEBUG
-# define DEBUG_LOG(expr) fprintf (stderr, #expr " 0x%jx\n", (uintmax_t) (expr))
+# define DEBUG_LOG(expr) errprintf (#expr " 0x%jx\n", (uintmax_t) (expr))
#endif
/* Get the address of a particular section or program header entry,
@@ -344,7 +344,7 @@ unexec (const char *new_name, const char *old_name)
new_data2_offset = old_bss_offset;
#ifdef UNEXELF_DEBUG
- fprintf (stderr, "old_bss_index %td\n", old_bss_index);
+ errprintf ("old_bss_index %td\n", old_bss_index);
DEBUG_LOG (old_bss_addr);
DEBUG_LOG (old_bss_size);
DEBUG_LOG (old_bss_offset);
@@ -395,9 +395,9 @@ unexec (const char *new_name, const char *old_name)
#ifdef UNEXELF_DEBUG
DEBUG_LOG (old_file_h->e_shoff);
- fprintf (stderr, "Old section count %td\n", (ptrdiff_t) old_file_h->e_shnum);
+ errprintf ("Old section count %td\n", (ptrdiff_t) old_file_h->e_shnum);
DEBUG_LOG (new_file_h->e_shoff);
- fprintf (stderr, "New section count %td\n", (ptrdiff_t) new_file_h->e_shnum);
+ errprintf ("New section count %td\n", (ptrdiff_t) new_file_h->e_shnum);
#endif
/* Fix up program header. Extend the writable data segment so
diff --git a/src/unexhp9k800.c b/src/unexhp9k800.c
index cbf1835b9e..48d516fa2f 100644
--- a/src/unexhp9k800.c
+++ b/src/unexhp9k800.c
@@ -167,7 +167,7 @@ read_header (int file, struct header *hdr, struct som_exec_auxhdr *auxhdr)
if (hdr->a_magic != EXEC_MAGIC && hdr->a_magic != SHARE_MAGIC
&& hdr->a_magic != DEMAND_MAGIC)
{
- fprintf (stderr, "a.out file doesn't have valid magic number\n");
+ errputs ("a.out file doesn't have valid magic number\n");
exit (1);
}
diff --git a/src/unexmacosx.c b/src/unexmacosx.c
index a94c0cccb6..4c93301369 100644
--- a/src/unexmacosx.c
+++ b/src/unexmacosx.c
@@ -303,9 +303,9 @@ unexec_error (const char *format, ...)
va_list ap;
va_start (ap, format);
- fprintf (stderr, "unexec: ");
- vfprintf (stderr, format, ap);
- fprintf (stderr, "\n");
+ errputs ("unexec: ");
+ verrprintf (format, ap);
+ errputc ('\n');
va_end (ap);
exit (1);
}
diff --git a/src/widget.c b/src/widget.c
index e662dd3ecd..a150088c93 100644
--- a/src/widget.c
+++ b/src/widget.c
@@ -364,8 +364,7 @@ EmacsFrameInitialize (Widget request, Widget new, ArgList dum1, Cardinal *dum2)
if (!ew->emacs_frame.frame)
{
- fprintf (stderr,
- "can't create an emacs frame widget without a frame\n");
+ errputs ("can't create an emacs frame widget without a frame\n");
exit (1);
}
diff --git a/src/xdisp.c b/src/xdisp.c
index c13a950e3a..4dbb183bd5 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -302,7 +302,6 @@ Copyright (C) 1985-1988, 1993-1995, 1997-2019 Free Software Foundation,
buffer_posn_from_coords in dispnew.c for how this is handled. */
#include
-#include
#include
#include
#include
@@ -311,6 +310,7 @@ Copyright (C) 1985-1988, 1993-1995, 1997-2019 Free Software Foundation,
#include "atimer.h"
#include "composite.h"
#include "keyboard.h"
+#include "sysstdio.h"
#include "systime.h"
#include "frame.h"
#include "window.h"
@@ -1762,10 +1762,10 @@ pos_visible_p (struct window *w, ptrdiff_t charpos, int *x, int *y,
#if false
/* Debugging code. */
if (visible_p)
- fprintf (stderr, "+pv pt=%d vs=%d --> x=%d y=%d rt=%d rb=%d rh=%d vp=%d\n",
- charpos, w->vscroll, *x, *y, *rtop, *rbot, *rowh, *vpos);
+ errprintf ("+pv pt=%d vs=%d --> x=%d y=%d rt=%d rb=%d rh=%d vp=%d\n",
+ charpos, w->vscroll, *x, *y, *rtop, *rbot, *rowh, *vpos);
else
- fprintf (stderr, "-pv pt=%d vs=%d\n", charpos, w->vscroll);
+ errprintf ("-pv pt=%d vs=%d\n", charpos, w->vscroll);
#endif
/* Restore potentially overwritten values. */
@@ -10713,7 +10713,7 @@ message_to_stderr (Lisp_Object m)
if (noninteractive_need_newline)
{
noninteractive_need_newline = false;
- fputc ('\n', stderr);
+ errputc ('\n');
}
if (STRINGP (m))
{
@@ -10741,7 +10741,7 @@ message_to_stderr (Lisp_Object m)
}
}
else if (!cursor_in_echo_area)
- fputc ('\n', stderr);
+ errputc ('\n');
fflush (stderr);
}
@@ -10888,11 +10888,11 @@ vmessage (const char *m, va_list ap)
if (m)
{
if (noninteractive_need_newline)
- fputc ('\n', stderr);
+ errputc ('\n');
noninteractive_need_newline = false;
- vfprintf (stderr, m, ap);
+ verrprintf (m, ap);
if (!cursor_in_echo_area)
- fputc ('\n', stderr);
+ errputc ('\n');
fflush (stderr);
}
}
@@ -13679,13 +13679,13 @@ debug_method_add (struct window *w, char const *fmt, ...)
va_end (ap);
if (trace_redisplay_p)
- fprintf (stderr, "%p (%s): %s\n",
- ptr,
- ((BUFFERP (w->contents)
- && STRINGP (BVAR (XBUFFER (w->contents), name)))
- ? SSDATA (BVAR (XBUFFER (w->contents), name))
- : "no buffer"),
- method + len);
+ errprintf ("%p (%s): %s\n",
+ ptr,
+ ((BUFFERP (w->contents)
+ && STRINGP (BVAR (XBUFFER (w->contents), name)))
+ ? SSDATA (BVAR (XBUFFER (w->contents), name))
+ : "no buffer"),
+ method + len);
}
#endif /* GLYPH_DEBUG */
@@ -19521,117 +19521,111 @@ dump_glyph (struct glyph_row *row, struct glyph *glyph, int area)
if (glyph->type == CHAR_GLYPH
|| glyph->type == GLYPHLESS_GLYPH)
{
- fprintf (stderr,
- " %5"pD"d %c %9"pD"d %c %3d 0x%06x %c %4d %1.1d%1.1d\n",
- glyph - row->glyphs[TEXT_AREA],
- (glyph->type == CHAR_GLYPH
- ? 'C'
- : 'G'),
- glyph->charpos,
- (BUFFERP (glyph->object)
- ? 'B'
- : (STRINGP (glyph->object)
- ? 'S'
- : (NILP (glyph->object)
- ? '0'
- : '-'))),
- glyph->pixel_width,
- glyph->u.ch,
- (glyph->u.ch < 0x80 && glyph->u.ch >= ' '
- ? (int) glyph->u.ch
- : '.'),
- glyph->face_id,
- glyph->left_box_line_p,
- glyph->right_box_line_p);
+ errprintf (" %5"pD"d %c %9"pD"d %c %3d 0x%06x %c %4d %1.1d%1.1d\n",
+ glyph - row->glyphs[TEXT_AREA],
+ (glyph->type == CHAR_GLYPH
+ ? 'C'
+ : 'G'),
+ glyph->charpos,
+ (BUFFERP (glyph->object)
+ ? 'B'
+ : (STRINGP (glyph->object)
+ ? 'S'
+ : (NILP (glyph->object)
+ ? '0'
+ : '-'))),
+ glyph->pixel_width,
+ glyph->u.ch,
+ (glyph->u.ch < 0x80 && glyph->u.ch >= ' '
+ ? (int) glyph->u.ch
+ : '.'),
+ glyph->face_id,
+ glyph->left_box_line_p,
+ glyph->right_box_line_p);
}
else if (glyph->type == STRETCH_GLYPH)
{
- fprintf (stderr,
- " %5"pD"d %c %9"pD"d %c %3d 0x%06x %c %4d %1.1d%1.1d\n",
- glyph - row->glyphs[TEXT_AREA],
- 'S',
- glyph->charpos,
- (BUFFERP (glyph->object)
- ? 'B'
- : (STRINGP (glyph->object)
- ? 'S'
- : (NILP (glyph->object)
- ? '0'
- : '-'))),
- glyph->pixel_width,
- 0u,
- ' ',
- glyph->face_id,
- glyph->left_box_line_p,
- glyph->right_box_line_p);
+ errprintf (" %5"pD"d %c %9"pD"d %c %3d 0x%06x %c %4d %1.1d%1.1d\n",
+ glyph - row->glyphs[TEXT_AREA],
+ 'S',
+ glyph->charpos,
+ (BUFFERP (glyph->object)
+ ? 'B'
+ : (STRINGP (glyph->object)
+ ? 'S'
+ : (NILP (glyph->object)
+ ? '0'
+ : '-'))),
+ glyph->pixel_width,
+ 0u,
+ ' ',
+ glyph->face_id,
+ glyph->left_box_line_p,
+ glyph->right_box_line_p);
}
else if (glyph->type == IMAGE_GLYPH)
{
- fprintf (stderr,
- " %5"pD"d %c %9"pD"d %c %3d 0x%06x %c %4d %1.1d%1.1d\n",
- glyph - row->glyphs[TEXT_AREA],
- 'I',
- glyph->charpos,
- (BUFFERP (glyph->object)
- ? 'B'
- : (STRINGP (glyph->object)
- ? 'S'
- : (NILP (glyph->object)
- ? '0'
- : '-'))),
- glyph->pixel_width,
- (unsigned int) glyph->u.img_id,
- '.',
- glyph->face_id,
- glyph->left_box_line_p,
- glyph->right_box_line_p);
+ errprintf (" %5"pD"d %c %9"pD"d %c %3d 0x%06x %c %4d %1.1d%1.1d\n",
+ glyph - row->glyphs[TEXT_AREA],
+ 'I',
+ glyph->charpos,
+ (BUFFERP (glyph->object)
+ ? 'B'
+ : (STRINGP (glyph->object)
+ ? 'S'
+ : (NILP (glyph->object)
+ ? '0'
+ : '-'))),
+ glyph->pixel_width,
+ (unsigned int) glyph->u.img_id,
+ '.',
+ glyph->face_id,
+ glyph->left_box_line_p,
+ glyph->right_box_line_p);
}
else if (glyph->type == COMPOSITE_GLYPH)
{
- fprintf (stderr,
- " %5"pD"d %c %9"pD"d %c %3d 0x%06x",
- glyph - row->glyphs[TEXT_AREA],
- '+',
- glyph->charpos,
- (BUFFERP (glyph->object)
- ? 'B'
- : (STRINGP (glyph->object)
- ? 'S'
- : (NILP (glyph->object)
- ? '0'
- : '-'))),
- glyph->pixel_width,
- (unsigned int) glyph->u.cmp.id);
+ errprintf (" %5"pD"d %c %9"pD"d %c %3d 0x%06x",
+ glyph - row->glyphs[TEXT_AREA],
+ '+',
+ glyph->charpos,
+ (BUFFERP (glyph->object)
+ ? 'B'
+ : (STRINGP (glyph->object)
+ ? 'S'
+ : (NILP (glyph->object)
+ ? '0'
+ : '-'))),
+ glyph->pixel_width,
+ (unsigned int) glyph->u.cmp.id);
if (glyph->u.cmp.automatic)
- fprintf (stderr,
- "[%d-%d]",
- glyph->slice.cmp.from, glyph->slice.cmp.to);
- fprintf (stderr, " . %4d %1.1d%1.1d\n",
- glyph->face_id,
- glyph->left_box_line_p,
- glyph->right_box_line_p);
+ errprintf ("[%d-%d]",
+ glyph->slice.cmp.from, glyph->slice.cmp.to);
+ errprintf (" . %4d %1.1d%1.1d\n",
+ glyph->face_id,
+ glyph->left_box_line_p,
+ glyph->right_box_line_p);
}
else if (glyph->type == XWIDGET_GLYPH)
{
#ifndef HAVE_XWIDGETS
eassume (false);
#else
- fprintf (stderr,
- " %5td %4c %6td %c %3d %7p %c %4d %1.1d%1.1d\n",
- glyph - row->glyphs[TEXT_AREA],
- 'X',
- glyph->charpos,
- (BUFFERP (glyph->object)
- ? 'B'
- : (STRINGP (glyph->object)
- ? 'S'
- : '-')),
- glyph->pixel_width,
- glyph->u.xwidget,
- '.',
- glyph->face_id,
- glyph->left_box_line_p,
- glyph->right_box_line_p);
+ errprintf (" %5td %4c %6td %c %3d %7p %c %4d %1.1d%1.1d\n",
+ glyph - row->glyphs[TEXT_AREA],
+ 'X',
+ glyph->charpos,
+ (BUFFERP (glyph->object)
+ ? 'B'
+ : (STRINGP (glyph->object)
+ ? 'S'
+ : '-')),
+ glyph->pixel_width,
+ glyph->u.xwidget,
+ '.',
+ glyph->face_id,
+ glyph->left_box_line_p,
+ glyph->right_box_line_p);
#endif
}
}
@@ -19647,43 +19641,43 @@ dump_glyph_row (struct glyph_row *row, int vpos, int glyphs)
{
if (glyphs != 1)
{
- fprintf (stderr, "Row Start End Used oE><\\CTZFesm X Y W H V A P\n");
- fprintf (stderr, "==============================================================================\n");
+ errputs ("Row Start End Used oE><\\CTZFesm X Y W H V A P\n");
+ errputs ("==============================================================================\n");
- fprintf (stderr, "%3d %9"pD"d %9"pD"d %4d %1.1d%1.1d%1.1d%1.1d\
+ errprintf ("%3d %9"pD"d %9"pD"d %4d %1.1d%1.1d%1.1d%1.1d\
%1.1d%1.1d%1.1d%1.1d%1.1d%1.1d%1.1d%1.1d %4d %4d %4d %4d %4d %4d %4d\n",
- vpos,
- MATRIX_ROW_START_CHARPOS (row),
- MATRIX_ROW_END_CHARPOS (row),
- row->used[TEXT_AREA],
- row->contains_overlapping_glyphs_p,
- row->enabled_p,
- row->truncated_on_left_p,
- row->truncated_on_right_p,
- row->continued_p,
- MATRIX_ROW_CONTINUATION_LINE_P (row),
- MATRIX_ROW_DISPLAYS_TEXT_P (row),
- row->ends_at_zv_p,
- row->fill_line_p,
- row->ends_in_middle_of_char_p,
- row->starts_in_middle_of_char_p,
- row->mouse_face_p,
- row->x,
- row->y,
- row->pixel_width,
- row->height,
- row->visible_height,
- row->ascent,
- row->phys_ascent);
+ vpos,
+ MATRIX_ROW_START_CHARPOS (row),
+ MATRIX_ROW_END_CHARPOS (row),
+ row->used[TEXT_AREA],
+ row->contains_overlapping_glyphs_p,
+ row->enabled_p,
+ row->truncated_on_left_p,
+ row->truncated_on_right_p,
+ row->continued_p,
+ MATRIX_ROW_CONTINUATION_LINE_P (row),
+ MATRIX_ROW_DISPLAYS_TEXT_P (row),
+ row->ends_at_zv_p,
+ row->fill_line_p,
+ row->ends_in_middle_of_char_p,
+ row->starts_in_middle_of_char_p,
+ row->mouse_face_p,
+ row->x,
+ row->y,
+ row->pixel_width,
+ row->height,
+ row->visible_height,
+ row->ascent,
+ row->phys_ascent);
/* The next 3 lines should align to "Start" in the header. */
- fprintf (stderr, " %9"pD"d %9"pD"d\t%5d\n", row->start.overlay_string_index,
- row->end.overlay_string_index,
- row->continuation_lines_width);
- fprintf (stderr, " %9"pD"d %9"pD"d\n",
- CHARPOS (row->start.string_pos),
- CHARPOS (row->end.string_pos));
- fprintf (stderr, " %9d %9d\n", row->start.dpvec_index,
- row->end.dpvec_index);
+ errprintf (" %9"pD"d %9"pD"d\t%5d\n", row->start.overlay_string_index,
+ row->end.overlay_string_index,
+ row->continuation_lines_width);
+ errprintf (" %9"pD"d %9"pD"d\n",
+ CHARPOS (row->start.string_pos),
+ CHARPOS (row->end.string_pos));
+ errprintf (" %9d %9d\n", row->start.dpvec_index,
+ row->end.dpvec_index);
}
if (glyphs > 1)
@@ -19700,7 +19694,7 @@ dump_glyph_row (struct glyph_row *row, int vpos, int glyphs)
++glyph_end;
if (glyph < glyph_end)
- fprintf (stderr, " Glyph# Type Pos O W Code C Face LR\n");
+ errputs (" Glyph# Type Pos O W Code C Face LR\n");
for (; glyph < glyph_end; ++glyph)
dump_glyph (row, glyph, area);
@@ -19736,7 +19730,7 @@ dump_glyph_row (struct glyph_row *row, int vpos, int glyphs)
}
s[i] = '\0';
- fprintf (stderr, "%3d: (%d) '%s'\n", vpos, row->enabled_p, s);
+ errprintf ("%3d: (%d) '%s'\n", vpos, row->enabled_p, s);
}
}
}
@@ -19756,11 +19750,11 @@ DEFUN ("dump-glyph-matrix", Fdump_glyph_matrix,
struct window *w = XWINDOW (selected_window);
struct buffer *buffer = XBUFFER (w->contents);
- fprintf (stderr, "PT = %"pD"d, BEGV = %"pD"d. ZV = %"pD"d\n",
- BUF_PT (buffer), BUF_BEGV (buffer), BUF_ZV (buffer));
- fprintf (stderr, "Cursor x = %d, y = %d, hpos = %d, vpos = %d\n",
- w->cursor.x, w->cursor.y, w->cursor.hpos, w->cursor.vpos);
- fprintf (stderr, "=============================================\n");
+ errprintf ("PT = %"pD"d, BEGV = %"pD"d. ZV = %"pD"d\n",
+ BUF_PT (buffer), BUF_BEGV (buffer), BUF_ZV (buffer));
+ errprintf ("Cursor x = %d, y = %d, hpos = %d, vpos = %d\n",
+ w->cursor.x, w->cursor.y, w->cursor.hpos, w->cursor.vpos);
+ errputs ("=============================================\n");
dump_glyph_matrix (w->current_matrix,
TYPE_RANGED_FIXNUMP (int, glyphs) ? XFIXNUM (glyphs) : 0);
return Qnil;
@@ -19777,7 +19771,7 @@ DEFUN ("dump-frame-glyph-matrix", Fdump_frame_glyph_matrix,
if (f->current_matrix)
dump_glyph_matrix (f->current_matrix, 1);
else
- fprintf (stderr, "*** This frame doesn't have a frame glyph matrix ***\n");
+ errputs ("*** This frame doesn't have a frame glyph matrix ***\n");
return Qnil;
}
@@ -25973,18 +25967,18 @@ get_font_ascent_descent (struct font *font, int *ascent, int *descent)
void
dump_glyph_string (struct glyph_string *s)
{
- fprintf (stderr, "glyph string\n");
- fprintf (stderr, " x, y, w, h = %d, %d, %d, %d\n",
- s->x, s->y, s->width, s->height);
- fprintf (stderr, " ybase = %d\n", s->ybase);
- fprintf (stderr, " hl = %u\n", s->hl);
- fprintf (stderr, " left overhang = %d, right = %d\n",
- s->left_overhang, s->right_overhang);
- fprintf (stderr, " nchars = %d\n", s->nchars);
- fprintf (stderr, " extends to end of line = %d\n",
- s->extends_to_end_of_line_p);
- fprintf (stderr, " font height = %d\n", FONT_HEIGHT (s->font));
- fprintf (stderr, " bg width = %d\n", s->background_width);
+ errputs ("glyph string\n");
+ errprintf (" x, y, w, h = %d, %d, %d, %d\n",
+ s->x, s->y, s->width, s->height);
+ errprintf (" ybase = %d\n", s->ybase);
+ errprintf (" hl = %u\n", s->hl);
+ errprintf (" left overhang = %d, right = %d\n",
+ s->left_overhang, s->right_overhang);
+ errprintf (" nchars = %d\n", s->nchars);
+ errprintf (" extends to end of line = %d\n",
+ s->extends_to_end_of_line_p);
+ errprintf (" font height = %d\n", FONT_HEIGHT (s->font));
+ errprintf (" bg width = %d\n", s->background_width);
}
#endif /* GLYPH_DEBUG */
diff --git a/src/xfaces.c b/src/xfaces.c
index d9e66eaf2d..ed3bb0945e 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -418,21 +418,15 @@ DEFUN ("dump-colors", Fdump_colors, Sdump_colors, 0, 0, 0,
{
int i, n;
- fputc ('\n', stderr);
+ errputc ('\n');
for (i = n = 0; i < ARRAYELTS (color_count); ++i)
if (color_count[i])
- {
- fprintf (stderr, "%3d: %5d", i, color_count[i]);
- ++n;
- if (n % 5 == 0)
- fputc ('\n', stderr);
- else
- fputc ('\t', stderr);
- }
+ errprintf ("%3d: %5d%c", i, color_count[i],
+ ++n % 5 == 0 ? '\n' : '\t');
if (n % 5 != 0)
- fputc ('\n', stderr);
+ errputc ('\n');
return Qnil;
}
@@ -6397,28 +6391,28 @@ DEFUN ("x-load-color-file", Fx_load_color_file,
static void
dump_realized_face (struct face *face)
{
- fprintf (stderr, "ID: %d\n", face->id);
+ errprintf ("ID: %d\n", face->id);
#ifdef HAVE_X_WINDOWS
- fprintf (stderr, "gc: %p\n", face->gc);
+ errprintf ("gc: %p\n", face->gc);
#endif
- fprintf (stderr, "foreground: 0x%lx (%s)\n",
- face->foreground,
- SDATA (face->lface[LFACE_FOREGROUND_INDEX]));
- fprintf (stderr, "background: 0x%lx (%s)\n",
- face->background,
- SDATA (face->lface[LFACE_BACKGROUND_INDEX]));
+ errprintf ("foreground: 0x%lx (%s)\n",
+ face->foreground,
+ SDATA (face->lface[LFACE_FOREGROUND_INDEX]));
+ errprintf ("background: 0x%lx (%s)\n",
+ face->background,
+ SDATA (face->lface[LFACE_BACKGROUND_INDEX]));
if (face->font)
- fprintf (stderr, "font_name: %s (%s)\n",
- SDATA (face->font->props[FONT_NAME_INDEX]),
- SDATA (face->lface[LFACE_FAMILY_INDEX]));
+ errprintf ("font_name: %s (%s)\n",
+ SDATA (face->font->props[FONT_NAME_INDEX]),
+ SDATA (face->lface[LFACE_FAMILY_INDEX]));
#ifdef HAVE_X_WINDOWS
- fprintf (stderr, "font = %p\n", face->font);
+ errprintf ("font = %p\n", face->font);
#endif
- fprintf (stderr, "fontset: %d\n", face->fontset);
- fprintf (stderr, "underline: %d (%s)\n",
- face->underline_p,
- SDATA (Fsymbol_name (face->lface[LFACE_UNDERLINE_INDEX])));
- fprintf (stderr, "hash: %" PRIuPTR "\n", face->hash);
+ errprintf ("fontset: %d\n", face->fontset);
+ errprintf ("underline: %d (%s)\n",
+ face->underline_p,
+ SDATA (Fsymbol_name (face->lface[LFACE_UNDERLINE_INDEX])));
+ errprintf ("hash: %" PRIuPTR "\n", face->hash);
}
@@ -6429,14 +6423,14 @@ DEFUN ("dump-face", Fdump_face, Sdump_face, 0, 1, 0, doc: /* */)
{
int i;
- fprintf (stderr, "font selection order: ");
+ errputs ("font selection order: ");
for (i = 0; i < ARRAYELTS (font_sort_order); ++i)
- fprintf (stderr, "%d ", font_sort_order[i]);
- fprintf (stderr, "\n");
+ errprintf ("%d ", font_sort_order[i]);
+ errputc ('\n');
- fprintf (stderr, "alternative fonts: ");
+ errputs ("alternative fonts: ");
debug_print (Vface_alternative_font_family_alist);
- fprintf (stderr, "\n");
+ errputc ('\n');
for (i = 0; i < FRAME_FACE_CACHE (SELECTED_FRAME ())->used; ++i)
Fdump_face (make_fixnum (i));
@@ -6459,9 +6453,9 @@ DEFUN ("show-face-resources", Fshow_face_resources, Sshow_face_resources,
0, 0, 0, doc: /* */)
(void)
{
- fprintf (stderr, "number of colors = %d\n", ncolors_allocated);
- fprintf (stderr, "number of pixmaps = %d\n", npixmaps_allocated);
- fprintf (stderr, "number of GCs = %d\n", ngcs);
+ errprintf ("number of colors = %d\n", ncolors_allocated);
+ errprintf ("number of pixmaps = %d\n", npixmaps_allocated);
+ errprintf ("number of GCs = %d\n", ngcs);
return Qnil;
}
diff --git a/src/xfns.c b/src/xfns.c
index b8a1914186..24c01ace58 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -2384,13 +2384,13 @@ print_fontset_result (XFontSet xfs, char *name, char **missing_list,
int missing_count)
{
if (xfs)
- fprintf (stderr, "XIC Fontset created: %s\n", name);
+ errprintf ("XIC Fontset created: %s\n", name);
else
{
- fprintf (stderr, "XIC Fontset failed: %s\n", name);
+ errprintf ("XIC Fontset failed: %s\n", name);
while (missing_count-- > 0)
{
- fprintf (stderr, " missing: %s\n", *missing_list);
+ errprintf (" missing: %s\n", *missing_list);
missing_list++;
}
}
diff --git a/src/xmenu.c b/src/xmenu.c
index 22d1cc21aa..2f952f363e 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -2321,7 +2321,7 @@ x_menu_show (struct frame *f, int x, int y, int menuflags,
{
case XM_SUCCESS:
#ifdef XDEBUG
- fprintf (stderr, "pane= %d line = %d\n", panes, selidx);
+ errprintf ("pane= %d line = %d\n", panes, selidx);
#endif
/* Find the item number SELIDX in pane number PANE. */
diff --git a/src/xrdb.c b/src/xrdb.c
index 9c625e9821..4dbc7cee30 100644
--- a/src/xrdb.c
+++ b/src/xrdb.c
@@ -589,7 +589,7 @@ member (char *elt, List list)
static void
fatal (char *msg, char *prog)
{
- fprintf (stderr, msg, prog);
+ errprintf (msg, prog);
exit (1);
}
diff --git a/src/xselect.c b/src/xselect.c
index 5f0bb44cc9..6268e74d8e 100644
--- a/src/xselect.c
+++ b/src/xselect.c
@@ -21,7 +21,6 @@
#include
#include
-#include /* termhooks.h needs this */
#ifdef HAVE_SYS_TYPES_H
#include
@@ -33,6 +32,7 @@
#include "xterm.h" /* for all of the X includes */
#include "frame.h" /* Need this to get the X window of selected_frame */
#include "blockinput.h"
+#include "sysstdio.h"
#include "termhooks.h"
#include "keyboard.h"
#include "pdumper.h"
@@ -63,13 +63,13 @@
#ifdef TRACE_SELECTION
#define TRACE0(fmt) \
- fprintf (stderr, "%"pMd": " fmt "\n", (printmax_t) getpid ())
+ errprintf ("%"pMd": " fmt "\n", (printmax_t) getpid ())
#define TRACE1(fmt, a0) \
- fprintf (stderr, "%"pMd": " fmt "\n", (printmax_t) getpid (), a0)
+ errprintf ("%"pMd": " fmt "\n", (printmax_t) getpid (), a0)
#define TRACE2(fmt, a0, a1) \
- fprintf (stderr, "%"pMd": " fmt "\n", (printmax_t) getpid (), a0, a1)
+ errprintf ("%"pMd": " fmt "\n", (printmax_t) getpid (), a0, a1)
#define TRACE3(fmt, a0, a1, a2) \
- fprintf (stderr, "%"pMd": " fmt "\n", (printmax_t) getpid (), a0, a1, a2)
+ errprintf ("%"pMd": " fmt "\n", (printmax_t) getpid (), a0, a1, a2)
#else
#define TRACE0(fmt) (void) 0
#define TRACE1(fmt, a0) (void) 0
@@ -2172,7 +2172,7 @@ x_clipboard_manager_error_1 (Lisp_Object err)
static Lisp_Object
x_clipboard_manager_error_2 (Lisp_Object err)
{
- fprintf (stderr, "Error saving to X clipboard manager.\n\
+ errprintf ("Error saving to X clipboard manager.\n\
If the problem persists, set '%s' \
to nil.\n", "x-select-enable-clipboard-manager");
return Qnil;
diff --git a/src/xsmfns.c b/src/xsmfns.c
index 1706cddf27..e2e544516c 100644
--- a/src/xsmfns.c
+++ b/src/xsmfns.c
@@ -29,10 +29,10 @@ Copyright (C) 2002-2019 Free Software Foundation, Inc.
#include
#include
#include
-#include
#include "lisp.h"
#include "frame.h"
+#include "sysstdio.h"
#include "termhooks.h"
#include "xterm.h"
#include "process.h"
@@ -404,8 +404,8 @@ #define SM_ERRORSTRING_LEN 512
char *pwd = emacs_get_current_dir_name ();
if (!pwd)
{
- fprintf (stderr, "Disabling session management due to pwd error: %s\n",
- emacs_strerror (errno));
+ errprintf ("Disabling session management due to pwd error: %s\n",
+ emacs_strerror (errno));
return;
}
xfree (pwd);
diff --git a/src/xterm.c b/src/xterm.c
index 38bc17de97..7fea1946eb 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -21,12 +21,12 @@ Copyright (C) 1989, 1993-2019 Free Software Foundation, Inc.
/* Xt features made by Fred Pierresteguy. */
#include
-#include
#include
#include
#include "lisp.h"
#include "blockinput.h"
+#include "sysstdio.h"
/* This may include sys/types.h, and that somehow loses
if this is not done before the other system files. */
@@ -9876,7 +9876,7 @@ x_fully_uncatch_errors (void)
static unsigned int x_wire_count;
x_trace_wire (void)
{
- fprintf (stderr, "Lib call: %d\n", ++x_wire_count);
+ errprintf ("Lib call: %d\n", ++x_wire_count);
}
#endif
@@ -9954,11 +9954,11 @@ x_connection_closed (Display *dpy, const char *error_message, bool ioerror)
the resulting Glib error message loop filled a user's disk.
To avoid this, kill Emacs unconditionally on disconnect. */
shut_down_emacs (0, Qnil);
- fprintf (stderr, "%s\n\
+ errprintf ("%s\n\
When compiled with GTK, Emacs cannot recover from X disconnects.\n\
This is a GTK bug: https://gitlab.gnome.org/GNOME/gtk/issues/221\n\
For details, see etc/PROBLEMS.\n",
- error_msg);
+ error_msg);
emacs_abort ();
#endif /* USE_GTK */
@@ -9980,7 +9980,7 @@ x_connection_closed (Display *dpy, const char *error_message, bool ioerror)
if (terminal_list == 0)
{
- fprintf (stderr, "%s\n", error_msg);
+ errprintf ("%s\n", error_msg);
Fkill_emacs (make_fixnum (70));
/* NOTREACHED */
}
@@ -12465,7 +12465,7 @@ my_log_handler (const gchar *log_domain, GLogLevelFlags log_level,
const gchar *msg, gpointer user_data)
{
if (!strstr (msg, "g_set_prgname"))
- fprintf (stderr, "%s-WARNING **: %s\n", log_domain, msg);
+ errprintf ("%s-WARNING **: %s\n", log_domain, msg);
}
#endif
@@ -13441,8 +13441,7 @@ x_initialize (void)
#if THREADS_ENABLED
/* This must be called before any other Xlib routines. */
if (XInitThreads () == 0)
- fprintf (stderr,
- "Warning: An error occurred initializing X11 thread support!\n");
+ errputs ("Warning: An error occurred initializing X11 thread support!\n");
#endif
#ifdef USE_X_TOOLKIT
--
2.21.0