aboutsummaryrefslogtreecommitdiff
path: root/gdb/mi
diff options
context:
space:
mode:
authorAlan Hayward <alan.hayward@arm.com>2019-05-17 14:07:04 +0100
committerAlan Hayward <alan.hayward@arm.com>2019-05-17 14:07:04 +0100
commitf3a09c800fcd1d597fa2b9578cb59adfc15b698d (patch)
tree0cfd6d8b1c65fb029a59d706d47aee2f92c990c7 /gdb/mi
parentaf4fa23fba220c1b26bb3c8a7996b406dcc181cc (diff)
downloadgdb-f3a09c800fcd1d597fa2b9578cb59adfc15b698d.zip
gdb-f3a09c800fcd1d597fa2b9578cb59adfc15b698d.tar.gz
gdb-f3a09c800fcd1d597fa2b9578cb59adfc15b698d.tar.bz2
Change file close behavior for tee_file
Instead of using two bools to decide if the files should close when tee_file is closed, make file one stay open and file two close. This simplifies the use cases for it. Inline the make_logging_output into the calling functions (the logic here looks ugly in order to simplify a later change). Expand ui-redirect.exp to cover the changes, similar to mi-logging.exp. gdb/ChangeLog: * cli/cli-interp.c (cli_interp_base::set_logging): Create tee_file directly. * cli/cli-interp.h (make_logging_output): Remove declaration. * cli/cli-logging.c (make_logging_output): Remove function. * mi/mi-interp.c (mi_interp::set_logging): Create tee_file directly. * ui-file.c (tee_file::tee_file): Remove bools. (tee_file::~tee_file): Remove deletes. * ui-file.h (tee_file): Remove bools. gdb/testsuite/ChangeLog: * gdb.base/ui-redirect.exp: Test redirection.
Diffstat (limited to 'gdb/mi')
-rw-r--r--gdb/mi/mi-interp.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/gdb/mi/mi-interp.c b/gdb/mi/mi-interp.c
index 4568d39..6a19bf0 100644
--- a/gdb/mi/mi-interp.c
+++ b/gdb/mi/mi-interp.c
@@ -1286,18 +1286,27 @@ mi_interp::set_logging (ui_file_up logfile, bool logging_redirect)
if (logfile != NULL)
{
mi->saved_raw_stdout = mi->raw_stdout;
- mi->raw_stdout = make_logging_output (mi->raw_stdout,
- std::move (logfile),
- logging_redirect);
+ /* If something is being redirected, then grab logfile. */
+ ui_file *logfile_p = nullptr;
+ if (logging_redirect)
+ logfile_p = logfile.release ();
+
+ /* If something is not being redirected, then a tee containing both the
+ logfile and stdout. */
+ ui_file *tee = nullptr;
+ if (!logging_redirect)
+ tee = new tee_file (mi->raw_stdout, std::move (logfile));
+
+ mi->raw_stdout = logging_redirect ? logfile_p : tee;
}
else
{
delete mi->raw_stdout;
mi->raw_stdout = mi->saved_raw_stdout;
- mi->saved_raw_stdout = NULL;
+ mi->saved_raw_stdout = nullptr;
}
-
+
mi->out->set_raw (mi->raw_stdout);
mi->err->set_raw (mi->raw_stdout);
mi->log->set_raw (mi->raw_stdout);