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.
This commit is contained in:
Tom Tromey 2019-04-30 11:17:15 -06:00
parent 52ce35e289
commit 0735b091ab
7 changed files with 136 additions and 3 deletions

View file

@ -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));
}