/* Generic serial interface routines
- Copyright (C) 1992-2021 Free Software Foundation, Inc.
+ Copyright (C) 1992-2022 Free Software Foundation, Inc.
This file is part of GDB.
/* Non-NULL gives filename which contains a recording of the remote session,
suitable for playback by gdbserver. */
-static char *serial_logfile = NULL;
+static std::string serial_logfile;
static struct ui_file *serial_logfp = NULL;
static const struct serial_ops *serial_interface_lookup (const char *);
{
if (ch_type != serial_current_type)
{
- fprintf_unfiltered (stream, "\n%c ", ch_type);
+ gdb_printf (stream, "\n%c ", ch_type);
serial_current_type = ch_type;
}
if (serial_logbase != logbase_ascii)
- fputc_unfiltered (' ', stream);
+ gdb_putc (' ', stream);
switch (ch)
{
case SERIAL_TIMEOUT:
- fprintf_unfiltered (stream, "<Timeout: %d seconds>", timeout);
+ gdb_printf (stream, "<Timeout: %d seconds>", timeout);
return;
case SERIAL_ERROR:
- fprintf_unfiltered (stream, "<Error: %s>", safe_strerror (errno));
+ gdb_printf (stream, "<Error: %s>", safe_strerror (errno));
return;
case SERIAL_EOF:
- fputs_unfiltered ("<Eof>", stream);
+ gdb_puts ("<Eof>", stream);
return;
case SERIAL_BREAK:
- fputs_unfiltered ("<Break>", stream);
+ gdb_puts ("<Break>", stream);
return;
default:
if (serial_logbase == logbase_hex)
- fprintf_unfiltered (stream, "%02x", ch & 0xff);
+ gdb_printf (stream, "%02x", ch & 0xff);
else if (serial_logbase == logbase_octal)
- fprintf_unfiltered (stream, "%03o", ch & 0xff);
+ gdb_printf (stream, "%03o", ch & 0xff);
else
switch (ch)
{
case '\\':
- fputs_unfiltered ("\\\\", stream);
+ gdb_puts ("\\\\", stream);
break;
case '\b':
- fputs_unfiltered ("\\b", stream);
+ gdb_puts ("\\b", stream);
break;
case '\f':
- fputs_unfiltered ("\\f", stream);
+ gdb_puts ("\\f", stream);
break;
case '\n':
- fputs_unfiltered ("\\n", stream);
+ gdb_puts ("\\n", stream);
break;
case '\r':
- fputs_unfiltered ("\\r", stream);
+ gdb_puts ("\\r", stream);
break;
case '\t':
- fputs_unfiltered ("\\t", stream);
+ gdb_puts ("\\t", stream);
break;
case '\v':
- fputs_unfiltered ("\\v", stream);
+ gdb_puts ("\\v", stream);
break;
default:
- fprintf_unfiltered (stream,
- isprint (ch) ? "%c" : "\\x%02x", ch & 0xFF);
+ gdb_printf (stream,
+ isprint (ch) ? "%c" : "\\x%02x", ch & 0xFF);
break;
}
}
serial_current_type = 'c';
- fputs_unfiltered ("\nc ", serial_logfp);
- fputs_unfiltered (cmd, serial_logfp);
+ gdb_puts ("\nc ", serial_logfp);
+ gdb_puts (cmd, serial_logfp);
/* Make sure that the log file is as up-to-date as possible,
in case we are getting ready to dump core or something. */
const char *open_name = name;
if (startswith (name, "|"))
- {
- ops = serial_interface_lookup ("pipe");
- /* Discard ``|'' and any space before the command itself. */
- ++open_name;
- open_name = skip_spaces (open_name);
- }
+ ops = serial_interface_lookup ("pipe");
/* Check for a colon, suggesting an IP address/port pair.
Do this *after* checking for all the interesting prefixes. We
don't want to constrain the syntax of what can follow them. */
scb->next = scb_base;
scb_base = scb;
- if (serial_logfile != NULL)
+ if (!serial_logfile.empty ())
{
stdio_file_up file (new stdio_file ());
- if (!file->open (serial_logfile, "w"))
- perror_with_name (serial_logfile);
+ if (!file->open (serial_logfile.c_str (), "w"))
+ perror_with_name (serial_logfile.c_str ());
serial_logfp = file.release ();
}
{
ops = serial_interface_lookup ("terminal");
if (!ops)
- ops = serial_interface_lookup ("hardwire");
+ ops = serial_interface_lookup ("hardwire");
}
if (!ops)
if (serial_logfp)
{
- fputs_unfiltered ("\nEnd of log\n", serial_logfp);
+ gdb_puts ("\nEnd of log\n", serial_logfp);
serial_current_type = 0;
/* XXX - What if serial_logfp == gdb_stdout or gdb_stderr? */
}
if (serial_debug_p (scb))
{
- fprintf_unfiltered (gdb_stdlog, "[");
+ gdb_printf (gdb_stdlog, "[");
serial_logchar (gdb_stdlog, 'r', ch, timeout);
- fprintf_unfiltered (gdb_stdlog, "]");
+ gdb_printf (gdb_stdlog, "]");
gdb_flush (gdb_stdlog);
}
for (c = 0; c < count; c++)
{
- fprintf_unfiltered (gdb_stdlog, "[");
+ gdb_printf (gdb_stdlog, "[");
serial_logchar (gdb_stdlog, 'w', str[c] & 0xff, 0);
- fprintf_unfiltered (gdb_stdlog, "]");
+ gdb_printf (gdb_stdlog, "]");
}
gdb_flush (gdb_stdlog);
}
static struct cmd_list_element *serial_set_cmdlist;
static struct cmd_list_element *serial_show_cmdlist;
-/* Baud rate specified for talking to serial target systems. Default
- is left as -1, so targets can choose their own defaults. */
-/* FIXME: This means that "show serial baud" and gr_files_info can
- print -1 or (unsigned int)-1. This is a Bad User Interface. */
+/* See serial.h. */
int baud_rate = -1;
serial_baud_show_cmd (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- fprintf_filtered (file, _("Baud rate for remote serial I/O is %s.\n"),
- value);
+ gdb_printf (file, _("Baud rate for remote serial I/O is %s.\n"),
+ value);
}
-/* Parity for serial port. */
+/* See serial.h. */
int serial_parity = GDBPARITY_NONE;
Use <CR>~. or <CR>~^D to break out."));
#endif /* 0 */
- add_basic_prefix_cmd ("serial", class_maintenance, _("\
-Set default serial/parallel port configuration."),
- &serial_set_cmdlist, "set serial ",
- 0/*allow-unknown*/,
- &setlist);
-
- add_show_prefix_cmd ("serial", class_maintenance, _("\
-Show default serial/parallel port configuration."),
- &serial_show_cmdlist, "show serial ",
- 0/*allow-unknown*/,
- &showlist);
+ add_setshow_prefix_cmd ("serial", class_maintenance,
+ _("Set default serial/parallel port configuration."),
+ _("Show default serial/parallel port configuration."),
+ &serial_set_cmdlist, &serial_show_cmdlist,
+ &setlist, &showlist);
/* If target is open when baud changes, it doesn't take effect until
the next open (I think, not sure). */