From 0735b091aba72d4b35aebb671a02c5cb4a837fe9 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 30 Apr 2019 11:17:15 -0600 Subject: Do not emit style escape sequences to log file PR gdb/24502 requests that the "set logging" log file not contain style escape sequences emitted by gdb. This seemed like a reasonable request to me, so this patch implements filtering for the log file. This also updates a comment in ui-style.h that I noticed while writing the patch. Tested on x86-64 Fedora 29. gdb/ChangeLog 2019-06-14 Tom Tromey PR gdb/24502: * ui-style.h (skip_ansi_escape): Update comment. * ui-file.h (class no_terminal_escape_file): New class. * ui-file.c (no_terminal_escape_file::write) (no_terminal_escape_file::puts): New methods. * cli/cli-logging.c (handle_redirections): Use no_terminal_escape_file. gdb/testsuite/ChangeLog 2019-06-14 Tom Tromey PR gdb/24502: * gdb.base/style-logging.exp: New file. --- gdb/ui-file.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'gdb/ui-file.c') diff --git a/gdb/ui-file.c b/gdb/ui-file.c index 24c914f..05d411a 100644 --- a/gdb/ui-file.c +++ b/gdb/ui-file.c @@ -396,3 +396,35 @@ tee_file::can_emit_style_escape () && m_one->term_out () && term_cli_styling ()); } + +/* See ui-file.h. */ + +void +no_terminal_escape_file::write (const char *buf, long length_buf) +{ + std::string copy (buf, length_buf); + this->puts (copy.c_str ()); +} + +/* See ui-file.h. */ + +void +no_terminal_escape_file::puts (const char *buf) +{ + while (*buf != '\0') + { + const char *esc = strchr (buf, '\033'); + if (esc == nullptr) + break; + + int n_read = 0; + if (!skip_ansi_escape (esc, &n_read)) + ++esc; + + this->stdio_file::write (buf, esc - buf); + buf = esc + n_read; + } + + if (*buf != '\0') + this->stdio_file::write (buf, strlen (buf)); +} -- cgit v1.1