diff options
-rw-r--r-- | gdb/ChangeLog | 13 | ||||
-rw-r--r-- | gdb/serial.c | 188 | ||||
-rw-r--r-- | gdb/serial.h | 2 |
3 files changed, 13 insertions, 190 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2434e0c..075a12a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,18 @@ 2012-06-11 Pedro Alves <palves@redhat.com> + Remove #if 0'd "connect" command, and unnecessary associated + refcounting and serial reuse bits. + + * serial.h (struct serial): Remove fields 'next' and 'refcnt'. + * serial.c (last_serial_opened): Delete. + (scb_base): Delete. + (serial_open): Adjust. + (serial_for_fd): Delete. + (serial_fdopen_ops, do_serial_close): Adjust. + (serial_fdopen_ops): Adjust. + +2012-06-11 Pedro Alves <palves@redhat.com> + * serial.c (do_serial_close): Remove early return when SCB is null. diff --git a/gdb/serial.c b/gdb/serial.c index 9b689ba..c1f331d 100644 --- a/gdb/serial.c +++ b/gdb/serial.c @@ -33,14 +33,6 @@ static int global_serial_debug_p; static struct serial_ops *serial_ops_list = NULL; -/* This is the last serial stream opened. Used by connect command. */ - -static struct serial *last_serial_opened = NULL; - -/* Pointer to list of scb's. */ - -static struct serial *scb_base; - /* Non-NULL gives filename which contains a recording of the remote session, suitable for playback by gdbserver. */ @@ -174,13 +166,6 @@ serial_open (const char *name) struct serial_ops *ops; const char *open_name = name; - for (scb = scb_base; scb; scb = scb->next) - if (scb->name && strcmp (scb->name, name) == 0) - { - scb->refcnt++; - return scb; - } - if (strcmp (name, "pc") == 0) ops = serial_interface_lookup ("pc"); else if (strncmp (name, "lpt", 3) == 0) @@ -220,15 +205,10 @@ serial_open (const char *name) } scb->name = xstrdup (name); - scb->next = scb_base; - scb->refcnt = 1; scb->debug_p = 0; scb->async_state = 0; scb->async_handler = NULL; scb->async_context = NULL; - scb_base = scb; - - last_serial_opened = scb; if (serial_logfile != NULL) { @@ -240,21 +220,6 @@ serial_open (const char *name) return scb; } -/* Return the open serial device for FD, if found, or NULL if FD - is not already opened. */ - -struct serial * -serial_for_fd (int fd) -{ - struct serial *scb; - - for (scb = scb_base; scb; scb = scb->next) - if (scb->fd == fd) - return scb; - - return NULL; -} - /* Open a new serial stream using a file handle, using serial interface ops OPS. */ @@ -263,13 +228,6 @@ serial_fdopen_ops (const int fd, struct serial_ops *ops) { struct serial *scb; - scb = serial_for_fd (fd); - if (scb) - { - scb->refcnt++; - return scb; - } - if (!ops) { ops = serial_interface_lookup ("terminal"); @@ -289,21 +247,16 @@ serial_fdopen_ops (const int fd, struct serial_ops *ops) scb->error_fd = -1; scb->name = NULL; - scb->next = scb_base; - scb->refcnt = 1; scb->debug_p = 0; scb->async_state = 0; scb->async_handler = NULL; scb->async_context = NULL; - scb_base = scb; if ((ops->fdopen) != NULL) (*ops->fdopen) (scb, fd); else scb->fd = fd; - last_serial_opened = scb; - return scb; } @@ -318,8 +271,6 @@ do_serial_close (struct serial *scb, int really_close) { struct serial *tmp_scb; - last_serial_opened = NULL; - if (serial_logfp) { fputs_unfiltered ("\nEnd of log\n", serial_logfp); @@ -330,10 +281,6 @@ do_serial_close (struct serial *scb, int really_close) serial_logfp = NULL; } - scb->refcnt--; - if (scb->refcnt > 0) - return; - /* ensure that the FD has been taken out of async mode. */ if (scb->async_handler != NULL) serial_async (scb, NULL, NULL); @@ -344,18 +291,6 @@ do_serial_close (struct serial *scb, int really_close) if (scb->name) xfree (scb->name); - if (scb_base == scb) - scb_base = scb_base->next; - else - for (tmp_scb = scb_base; tmp_scb; tmp_scb = tmp_scb->next) - { - if (tmp_scb->next != scb) - continue; - - tmp_scb->next = tmp_scb->next->next; - break; - } - xfree (scb); } @@ -618,129 +553,6 @@ serial_pipe (struct serial *scbs[2]) return 0; } -#if 0 -/* The connect command is #if 0 because I hadn't thought of an elegant - way to wait for I/O on two `struct serial *'s simultaneously. Two - solutions came to mind: - - 1) Fork, and have have one fork handle the to user direction, - and have the other hand the to target direction. This - obviously won't cut it for MSDOS. - - 2) Use something like select. This assumes that stdin and - the target side can both be waited on via the same - mechanism. This may not be true for DOS, if GDB is - talking to the target via a TCP socket. - -grossman, 8 Jun 93 */ - -/* Connect the user directly to the remote system. This command acts just like - the 'cu' or 'tip' command. Use <CR>~. or <CR>~^D to break out. */ - -static struct serial *tty_desc; /* Controlling terminal */ - -static void -cleanup_tty (serial_ttystate ttystate) -{ - printf_unfiltered ("\r\n[Exiting connect mode]\r\n"); - serial_set_tty_state (tty_desc, ttystate); - xfree (ttystate); - serial_close (tty_desc); -} - -static void -connect_command (char *args, int fromtty) -{ - int c; - char cur_esc = 0; - serial_ttystate ttystate; - struct serial *port_desc; /* TTY port */ - - dont_repeat (); - - if (args) - fprintf_unfiltered (gdb_stderr, - "This command takes no args. " - "They have been ignored.\n"); - - printf_unfiltered ("[Entering connect mode. Use ~. or ~^D to escape]\n"); - - tty_desc = serial_fdopen (0); - port_desc = last_serial_opened; - - ttystate = serial_get_tty_state (tty_desc); - - serial_raw (tty_desc); - serial_raw (port_desc); - - make_cleanup (cleanup_tty, ttystate); - - while (1) - { - int mask; - - mask = serial_wait_2 (tty_desc, port_desc, -1); - - if (mask & 2) - { /* tty input */ - char cx; - - while (1) - { - c = serial_readchar (tty_desc, 0); - - if (c == SERIAL_TIMEOUT) - break; - - if (c < 0) - perror_with_name (_("connect")); - - cx = c; - serial_write (port_desc, &cx, 1); - - switch (cur_esc) - { - case 0: - if (c == '\r') - cur_esc = c; - break; - case '\r': - if (c == '~') - cur_esc = c; - else - cur_esc = 0; - break; - case '~': - if (c == '.' || c == '\004') - return; - else - cur_esc = 0; - } - } - } - - if (mask & 1) - { /* Port input */ - char cx; - - while (1) - { - c = serial_readchar (port_desc, 0); - - if (c == SERIAL_TIMEOUT) - break; - - if (c < 0) - perror_with_name (_("connect")); - - cx = c; - - serial_write (tty_desc, &cx, 1); - } - } - } -} -#endif /* 0 */ - /* Serial set/show framework. */ static struct cmd_list_element *serial_set_cmdlist; diff --git a/gdb/serial.h b/gdb/serial.h index 02a3b2d..8ba8ae6 100644 --- a/gdb/serial.h +++ b/gdb/serial.h @@ -232,8 +232,6 @@ struct serial still need to wait for this many more seconds. */ char *name; /* The name of the device or host */ - struct serial *next; /* Pointer to the next `struct serial *' */ - int refcnt; /* Number of pointers to this block */ int debug_p; /* Trace this serial devices operation. */ int async_state; /* Async internal state. */ void *async_context; /* Async event thread's context */ |