From 7016a382b0dc48001cb5c36e56b42fc41b1303a8 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 30 Dec 2021 10:23:18 -0700 Subject: Add ui_file::wrap_here Right now, wrap_here is a global function. In the long run, we'd like output streams to be relatively self-contained objects, and having a global function like this is counter to that goal. Also, existing code freely mixes writes to some parameterized stream with calls to wrap_here -- but wrap_here only really affects gdb_stdout, so this is also incoherent. This step is a patch toward making wrap_here more sane. It adds a wrap_here method to ui_file and changes ui_out implementations to use it. --- gdb/cli-out.c | 2 +- gdb/mi/mi-out.c | 2 +- gdb/ui-file.c | 6 ++++++ gdb/ui-file.h | 17 +++++++++++++++++ 4 files changed, 25 insertions(+), 2 deletions(-) (limited to 'gdb') diff --git a/gdb/cli-out.c b/gdb/cli-out.c index 925ba8a..b2daad1 100644 --- a/gdb/cli-out.c +++ b/gdb/cli-out.c @@ -243,7 +243,7 @@ cli_ui_out::do_wrap_hint (int indent) if (m_suppress_output) return; - wrap_here (indent); + m_streams.back ()->wrap_here (indent); } void diff --git a/gdb/mi/mi-out.c b/gdb/mi/mi-out.c index 72ae36d..53f7206 100644 --- a/gdb/mi/mi-out.c +++ b/gdb/mi/mi-out.c @@ -174,7 +174,7 @@ mi_ui_out::do_message (const ui_file_style &style, void mi_ui_out::do_wrap_hint (int indent) { - wrap_here (indent); + m_streams.back ()->wrap_here (indent); } void diff --git a/gdb/ui-file.c b/gdb/ui-file.c index d30ec04..57fc05a 100644 --- a/gdb/ui-file.c +++ b/gdb/ui-file.c @@ -131,6 +131,12 @@ ui_file::printchar (int c, int quoter, bool async_safe) this->write (buf, out); } +void +ui_file::wrap_here (int indent) +{ + ::wrap_here (indent); +} + void diff --git a/gdb/ui-file.h b/gdb/ui-file.h index 7c7b00d..3df9f93 100644 --- a/gdb/ui-file.h +++ b/gdb/ui-file.h @@ -107,6 +107,23 @@ public: return false; } + /* Indicate that if the next sequence of characters overflows the + line, a newline should be inserted here rather than when it hits + the end. If INDENT is non-zero, it is a number of spaces to be + printed to indent the wrapped part on the next line. + + If the line is already overfull, we immediately print a newline and + the indentation, and disable further wrapping. + + If we don't know the width of lines, but we know the page height, + we must not wrap words, but should still keep track of newlines + that were explicitly printed. + + This routine is guaranteed to force out any output which has been + squirreled away in the wrap_buffer, so wrap_here (0) can be + used to force out output from the wrap_buffer. */ + void wrap_here (int indent); + private: /* Helper function for putstr and putstrn. Print the character C on -- cgit v1.1