diff --git a/gdb/utils.c b/gdb/utils.c --- a/gdb/utils.c +++ b/gdb/utils.c @@ -1783,7 +1783,12 @@ fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream, newline -- if chars_per_line is right, we probably just overflowed anyway; if it's wrong, let us keep going. */ - fputc_unfiltered ('\n', stream); + /* XXX: The ideal thing would be to call + 'stream->putc' here, but we can't because it + currently calls 'fputc_unfiltered', which ends up + calling us, which generates an infinite + recursion. */ + stream->puts ("\n"); } else { @@ -1828,7 +1833,12 @@ fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream, wrap_here ((char *) 0); /* Spit out chars, cancel further wraps. */ lines_printed++; - fputc_unfiltered ('\n', stream); + /* XXX: The ideal thing would be to call + 'stream->putc' here, but we can't because it + currently calls 'fputc_unfiltered', which ends up + calling us, which generates an infinite + recursion. */ + stream->puts ("\n"); lineptr++; } } @@ -1923,10 +1933,7 @@ fputs_highlighted (const char *str, const compiled_regex &highlight, int putchar_unfiltered (int c) { - char buf = c; - - ui_file_write (gdb_stdout, &buf, 1); - return c; + return fputc_unfiltered (c, gdb_stdout); } /* Write character C to gdb_stdout using GDB's paging mechanism and return C. @@ -1941,9 +1948,11 @@ putchar_filtered (int c) int fputc_unfiltered (int c, struct ui_file *stream) { - char buf = c; + char buf[2]; - ui_file_write (stream, &buf, 1); + buf[0] = c; + buf[1] = 0; + fputs_unfiltered (buf, stream); return c; }