diff options
author | Tom Tromey <tromey@adacore.com> | 2019-04-30 11:17:15 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2019-06-14 14:13:29 -0600 |
commit | 0735b091aba72d4b35aebb671a02c5cb4a837fe9 (patch) | |
tree | c261406309225cb02197ba53b895a8030f0fc442 /gdb/ui-file.c | |
parent | 52ce35e2894e55cea94011dda6443be51e154f37 (diff) | |
download | binutils-0735b091aba72d4b35aebb671a02c5cb4a837fe9.zip binutils-0735b091aba72d4b35aebb671a02c5cb4a837fe9.tar.gz binutils-0735b091aba72d4b35aebb671a02c5cb4a837fe9.tar.bz2 |
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 <tromey@adacore.com>
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 <tromey@adacore.com>
PR gdb/24502:
* gdb.base/style-logging.exp: New file.
Diffstat (limited to 'gdb/ui-file.c')
-rw-r--r-- | gdb/ui-file.c | 32 |
1 files changed, 32 insertions, 0 deletions
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)); +} |