X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fserial.c;h=e253c0ec44af0cc28e79ecee963f896b21ec223d;hb=a350efd4fb368a35ada608f6bc26ccd3bed0ae6b;hp=0239fc833712518d5682e4b874c2c7fab3938121;hpb=71b73764977a3895b0dda3e7260eece7a8d3e60c;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/serial.c b/gdb/serial.c index 0239fc8337..e253c0ec44 100644 --- a/gdb/serial.c +++ b/gdb/serial.c @@ -1,6 +1,6 @@ /* Generic serial interface routines - Copyright (C) 1992-2018 Free Software Foundation, Inc. + Copyright (C) 1992-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -213,7 +213,17 @@ serial_open (const char *name) else if (strchr (name, ':')) ops = serial_interface_lookup ("tcp"); else - ops = serial_interface_lookup ("hardwire"); + { +#ifndef USE_WIN32API + /* Check to see if name is a socket. If it is, then treat it + as such. Otherwise assume that it's a character device. */ + struct stat sb; + if (stat (name, &sb) == 0 && (sb.st_mode & S_IFMT) == S_IFSOCK) + ops = serial_interface_lookup ("local"); + else +#endif + ops = serial_interface_lookup ("hardwire"); + } if (!ops) return NULL; @@ -237,6 +247,7 @@ serial_open_ops_1 (const struct serial_ops *ops, const char *open_name) return NULL; } + scb->name = open_name != NULL ? xstrdup (open_name) : NULL; scb->next = scb_base; scb_base = scb; @@ -281,6 +292,7 @@ serial_fdopen_ops (const int fd, const struct serial_ops *ops) scb = new_serial (ops); + scb->name = NULL; scb->next = scb_base; scb_base = scb; @@ -320,6 +332,8 @@ do_serial_close (struct serial *scb, int really_close) if (really_close) scb->ops->close (scb); + xfree (scb->name); + /* For serial_is_open. */ scb->bufp = NULL; @@ -434,16 +448,14 @@ serial_write (struct serial *scb, const void *buf, size_t count) } void -serial_printf (struct serial *desc, const char *format,...) +serial_printf (struct serial *desc, const char *format, ...) { va_list args; - char *buf; va_start (args, format); - buf = xstrvprintf (format, args); - serial_write (desc, buf, strlen (buf)); + std::string buf = string_vprintf (format, args); + serial_write (desc, buf.c_str (), buf.length ()); - xfree (buf); va_end (args); } @@ -611,20 +623,6 @@ serial_pipe (struct serial *scbs[2]) static struct cmd_list_element *serial_set_cmdlist; static struct cmd_list_element *serial_show_cmdlist; -static void -serial_set_cmd (const char *args, int from_tty) -{ - printf_unfiltered ("\"set serial\" must be followed " - "by the name of a command.\n"); - help_list (serial_set_cmdlist, "set serial ", all_commands, gdb_stdout); -} - -static void -serial_show_cmd (const char *args, int from_tty) -{ - cmd_show_list (serial_show_cmdlist, from_tty, ""); -} - /* 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 @@ -664,8 +662,9 @@ set_parity (const char *ignore_args, int from_tty, struct cmd_list_element *c) serial_parity = GDBPARITY_NONE; } +void _initialize_serial (); void -_initialize_serial (void) +_initialize_serial () { #if 0 add_com ("connect", class_obscure, connect_command, _("\ @@ -673,17 +672,17 @@ Connect the terminal directly up to the command monitor.\n\ Use ~. or ~^D to break out.")); #endif /* 0 */ - add_prefix_cmd ("serial", class_maintenance, serial_set_cmd, _("\ + add_basic_prefix_cmd ("serial", class_maintenance, _("\ Set default serial/parallel port configuration."), - &serial_set_cmdlist, "set serial ", - 0/*allow-unknown*/, - &setlist); + &serial_set_cmdlist, "set serial ", + 0/*allow-unknown*/, + &setlist); - add_prefix_cmd ("serial", class_maintenance, serial_show_cmd, _("\ + add_show_prefix_cmd ("serial", class_maintenance, _("\ Show default serial/parallel port configuration."), - &serial_show_cmdlist, "show serial ", - 0/*allow-unknown*/, - &showlist); + &serial_show_cmdlist, "show serial ", + 0/*allow-unknown*/, + &showlist); /* If target is open when baud changes, it doesn't take effect until the next open (I think, not sure). */ @@ -698,8 +697,8 @@ using remote targets."), add_setshow_enum_cmd ("parity", no_class, parity_enums, &parity, _("\ -Set parity for remote serial I/O"), _("\ -Show parity for remote serial I/O"), NULL, +Set parity for remote serial I/O."), _("\ +Show parity for remote serial I/O."), NULL, set_parity, NULL, /* FIXME: i18n: */ &serial_set_cmdlist, &serial_show_cmdlist); @@ -715,8 +714,8 @@ by gdbserver."), add_setshow_enum_cmd ("remotelogbase", no_class, logbase_enums, &serial_logbase, _("\ -Set numerical base for remote session logging"), _("\ -Show numerical base for remote session logging"), NULL, +Set numerical base for remote session logging."), _("\ +Show numerical base for remote session logging."), NULL, NULL, NULL, /* FIXME: i18n: */ &setlist, &showlist);