X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fserial.c;h=7f9362a3bf35550fdc5cad7a5ec4c8668c637538;hb=e04caa70901ed44eb9537ccdbd286fe9b0a46ce2;hp=91fdcbb3677a94f16fd30aa3cb7a53a20d473708;hpb=f1735a53a63040cc4b4a735bf18a3f20d308e519;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/serial.c b/gdb/serial.c index 91fdcbb367..7f9362a3bf 100644 --- a/gdb/serial.c +++ b/gdb/serial.c @@ -1,6 +1,6 @@ /* Generic serial interface routines - Copyright (C) 1992-2017 Free Software Foundation, Inc. + Copyright (C) 1992-2018 Free Software Foundation, Inc. This file is part of GDB. @@ -27,12 +27,9 @@ static unsigned int global_serial_debug_p; -typedef const struct serial_ops *serial_ops_p; -DEF_VEC_P (serial_ops_p); - /* Serial I/O handlers. */ -VEC (serial_ops_p) *serial_ops_list = NULL; +static std::vector serial_ops_list; /* Pointer to list of scb's. */ @@ -146,10 +143,7 @@ serial_log_command (struct target_ops *self, const char *cmd) static const struct serial_ops * serial_interface_lookup (const char *name) { - const struct serial_ops *ops; - int i; - - for (i = 0; VEC_iterate (serial_ops_p, serial_ops_list, i, ops); ++i) + for (const serial_ops *ops : serial_ops_list) if (strcmp (name, ops->name) == 0) return ops; @@ -159,7 +153,7 @@ serial_interface_lookup (const char *name) void serial_add_interface (const struct serial_ops *optable) { - VEC_safe_push (serial_ops_p, serial_ops_list, optable); + serial_ops_list.push_back (optable); } /* Return the open serial device for FD, if found, or NULL if FD is @@ -203,7 +197,6 @@ static struct serial *serial_open_ops_1 (const struct serial_ops *ops, struct serial * serial_open (const char *name) { - struct serial *scb; const struct serial_ops *ops; const char *open_name = name; @@ -220,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; @@ -441,16 +444,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); } @@ -513,14 +514,6 @@ serial_print_tty_state (struct serial *scb, scb->ops->print_tty_state (scb, ttystate, stream); } -int -serial_noflush_set_tty_state (struct serial *scb, - serial_ttystate new_ttystate, - serial_ttystate old_ttystate) -{ - return scb->ops->noflush_set_tty_state (scb, new_ttystate, old_ttystate); -} - int serial_setbaudrate (struct serial *scb, int rate) { @@ -627,7 +620,7 @@ static struct cmd_list_element *serial_set_cmdlist; static struct cmd_list_element *serial_show_cmdlist; static void -serial_set_cmd (char *args, int from_tty) +serial_set_cmd (const char *args, int from_tty) { printf_unfiltered ("\"set serial\" must be followed " "by the name of a command.\n"); @@ -635,7 +628,7 @@ serial_set_cmd (char *args, int from_tty) } static void -serial_show_cmd (char *args, int from_tty) +serial_show_cmd (const char *args, int from_tty) { cmd_show_list (serial_show_cmdlist, from_tty, ""); } @@ -669,7 +662,7 @@ static const char *parity = parity_none; /* Set serial_parity value. */ static void -set_parity (char *ignore_args, int from_tty, struct cmd_list_element *c) +set_parity (const char *ignore_args, int from_tty, struct cmd_list_element *c) { if (parity == parity_odd) serial_parity = GDBPARITY_ODD;