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:
Pedro Alves 2012-06-11 20:33:56 +00:00
parent 318aa544a8
commit d5ad6aa5ce
3 changed files with 13 additions and 190 deletions

View File

@ -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

View File

@ -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;

View File

@ -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 */