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.
This commit is contained in:
parent
318aa544a8
commit
d5ad6aa5ce
|
@ -1,3 +1,16 @@
|
|||
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
|
||||
|
|
188
gdb/serial.c
188
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;
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue