Make gdb_flush also flush the wrap buffer

This changes gdb_flush to also flush the internal wrap buffer.  A few
places needed to continue using the previous approach, so this also
introduces ui_file_flush for those.

2020-02-05  Iain Buclaw  <ibuclaw@gdcproject.org>

        * gdb/event-loop.c (gdb_wait_for_event): Update.
        * gdb/printcmd.c (printf_command): Update.
        * gdb/remote-fileio.c (remote_fileio_func_write): Update.
        * gdb/remote-sim.c (gdb_os_flush_stdout): Update.
        (gdb_os_flush_stderr): Update.
        * gdb/remote.c (remote_console_output): Update.
        * gdb/ui-file.c (gdb_flush): Rename to...
        (ui_file_flush): ...this.
        (stderr_file::write): Update.
        (stderr_file::puts): Update.
        * gdb/ui-file.h (gdb_flush): Rename to...
        (ui_file_flush): ...this.
        * gdb/utils.c (gdb_flush): Add function.
        * gdb/utils.h (gdb_flush): Add declaration.

Change-Id: I7ca143d30f03dc39f218f6e880eb9bca9e15af39
This commit is contained in:
Iain Buclaw 2020-02-05 12:25:09 +01:00 committed by Tom Tromey
parent 5abbbe1d13
commit faa17681cc
11 changed files with 44 additions and 12 deletions

View File

@ -1,3 +1,20 @@
2020-02-05 Iain Buclaw <ibuclaw@gdcproject.org>
* gdb/event-loop.c (gdb_wait_for_event): Update.
* gdb/printcmd.c (printf_command): Update.
* gdb/remote-fileio.c (remote_fileio_func_write): Update.
* gdb/remote-sim.c (gdb_os_flush_stdout): Update.
(gdb_os_flush_stderr): Update.
* gdb/remote.c (remote_console_output): Update.
* gdb/ui-file.c (gdb_flush): Rename to...
(ui_file_flush): ...this.
(stderr_file::write): Update.
(stderr_file::puts): Update.
* gdb/ui-file.h (gdb_flush): Rename to...
(ui_file_flush): ...this.
* gdb/utils.c (gdb_flush): Add function.
* gdb/utils.h (gdb_flush): Add declaration.
2020-02-07 Tom Tromey <tromey@adacore.com> 2020-02-07 Tom Tromey <tromey@adacore.com>
PR breakpoints/24915: PR breakpoints/24915:

View File

@ -750,8 +750,8 @@ gdb_wait_for_event (int block)
int num_found = 0; int num_found = 0;
/* Make sure all output is done before getting another event. */ /* Make sure all output is done before getting another event. */
gdb_flush (gdb_stdout); ui_file_flush (gdb_stdout);
gdb_flush (gdb_stderr); ui_file_flush (gdb_stderr);
if (gdb_notifier.num_fds == 0) if (gdb_notifier.num_fds == 0)
return -1; return -1;

View File

@ -416,7 +416,7 @@ display_gdb_prompt (const char *new_prompt)
/* Don't use a _filtered function here. It causes the assumed /* Don't use a _filtered function here. It causes the assumed
character position to be off, since the newline we read from character position to be off, since the newline we read from
the user is not accounted for. */ the user is not accounted for. */
fputs_unfiltered (actual_gdb_prompt.c_str (), gdb_stdout); fprintf_unfiltered (gdb_stdout, "%s", actual_gdb_prompt.c_str ());
gdb_flush (gdb_stdout); gdb_flush (gdb_stdout);
} }
} }

View File

@ -2720,7 +2720,7 @@ printf_command (const char *arg, int from_tty)
ui_printf (arg, gdb_stdout); ui_printf (arg, gdb_stdout);
reset_terminal_style (gdb_stdout); reset_terminal_style (gdb_stdout);
wrap_here (""); wrap_here ("");
gdb_flush (gdb_stdout); ui_file_flush (gdb_stdout);
} }
/* Implement the "eval" command. */ /* Implement the "eval" command. */

View File

@ -641,7 +641,7 @@ remote_fileio_func_write (remote_target *remote, char *buf)
case FIO_FD_CONSOLE_OUT: case FIO_FD_CONSOLE_OUT:
ui_file_write (target_fd == 1 ? gdb_stdtarg : gdb_stdtargerr, ui_file_write (target_fd == 1 ? gdb_stdtarg : gdb_stdtargerr,
(char *) buffer, length); (char *) buffer, length);
gdb_flush (target_fd == 1 ? gdb_stdtarg : gdb_stdtargerr); ui_file_flush (target_fd == 1 ? gdb_stdtarg : gdb_stdtargerr);
ret = length; ret = length;
break; break;
default: default:

View File

@ -360,7 +360,7 @@ gdb_os_write_stdout (host_callback *p, const char *buf, int len)
static void static void
gdb_os_flush_stdout (host_callback *p) gdb_os_flush_stdout (host_callback *p)
{ {
gdb_flush (gdb_stdtarg); ui_file_flush (gdb_stdtarg);
} }
/* GDB version of os_write_stderr callback. */ /* GDB version of os_write_stderr callback. */
@ -385,7 +385,7 @@ gdb_os_write_stderr (host_callback *p, const char *buf, int len)
static void static void
gdb_os_flush_stderr (host_callback *p) gdb_os_flush_stderr (host_callback *p)
{ {
gdb_flush (gdb_stdtargerr); ui_file_flush (gdb_stdtargerr);
} }
/* GDB version of printf_filtered callback. */ /* GDB version of printf_filtered callback. */

View File

@ -6847,7 +6847,7 @@ remote_console_output (const char *msg)
tb[1] = 0; tb[1] = 0;
fputs_unfiltered (tb, gdb_stdtarg); fputs_unfiltered (tb, gdb_stdtarg);
} }
gdb_flush (gdb_stdtarg); ui_file_flush (gdb_stdtarg);
} }
struct stop_reply : public notif_event struct stop_reply : public notif_event

View File

@ -91,7 +91,7 @@ null_file::write_async_safe (const char *buf, long sizeof_buf)
void void
gdb_flush (struct ui_file *file) ui_file_flush (struct ui_file *file)
{ {
file->flush (); file->flush ();
} }
@ -315,7 +315,7 @@ stdio_file::can_emit_style_escape ()
void void
stderr_file::write (const char *buf, long length_buf) stderr_file::write (const char *buf, long length_buf)
{ {
gdb_flush (gdb_stdout); ui_file_flush (gdb_stdout);
stdio_file::write (buf, length_buf); stdio_file::write (buf, length_buf);
} }
@ -325,7 +325,7 @@ stderr_file::write (const char *buf, long length_buf)
void void
stderr_file::puts (const char *linebuffer) stderr_file::puts (const char *linebuffer)
{ {
gdb_flush (gdb_stdout); ui_file_flush (gdb_stdout);
stdio_file::puts (linebuffer); stdio_file::puts (linebuffer);
} }

View File

@ -100,7 +100,7 @@ public:
/* A preallocated null_file stream. */ /* A preallocated null_file stream. */
extern null_file null_stream; extern null_file null_stream;
extern void gdb_flush (ui_file *); extern void ui_file_flush (ui_file *);
extern int ui_file_isatty (struct ui_file *); extern int ui_file_isatty (struct ui_file *);

View File

@ -1544,6 +1544,15 @@ flush_wrap_buffer (struct ui_file *stream)
} }
} }
/* See utils.h. */
void
gdb_flush (struct ui_file *stream)
{
flush_wrap_buffer (stream);
ui_file_flush (stream);
}
/* Indicate that if the next sequence of characters overflows the line, /* Indicate that if the next sequence of characters overflows the line,
a newline should be inserted here rather than when it hits the end. a newline should be inserted here rather than when it hits the end.
If INDENT is non-null, it is a string to be printed to indent the If INDENT is non-null, it is a string to be printed to indent the

View File

@ -320,6 +320,12 @@ extern struct ui_file **current_ui_gdb_stdin_ptr (void);
extern struct ui_file **current_ui_gdb_stderr_ptr (void); extern struct ui_file **current_ui_gdb_stderr_ptr (void);
extern struct ui_file **current_ui_gdb_stdlog_ptr (void); extern struct ui_file **current_ui_gdb_stdlog_ptr (void);
/* Flush STREAM. This is a wrapper for ui_file_flush that also
flushes any output pending from uses of the *_filtered output
functions; that output is kept in a special buffer so that
pagination and styling are handled properly. */
extern void gdb_flush (struct ui_file *);
/* The current top level's ui_file streams. */ /* The current top level's ui_file streams. */
/* Normal results */ /* Normal results */