diff options
author | Tom Tromey <tromey@redhat.com> | 2013-12-06 11:34:49 -0700 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2013-12-19 08:50:48 -0700 |
commit | 12e8c7d7c2af309b8fd6bf0f61e99b0a6aad4c80 (patch) | |
tree | e0dffbb79fb883c98ebbcac865ab686ca74d36cf /gdb/ser-pipe.c | |
parent | fcd488ca4e57141ac8ad28b6a5f560f3b9753a67 (diff) | |
download | gdb-12e8c7d7c2af309b8fd6bf0f61e99b0a6aad4c80.zip gdb-12e8c7d7c2af309b8fd6bf0f61e99b0a6aad4c80.tar.gz gdb-12e8c7d7c2af309b8fd6bf0f61e99b0a6aad4c80.tar.bz2 |
don't allocate serial_ops
Now that struct serial_ops is const everywhere, we can easily turn the
instances into globals. This patch implements this idea.
On the one hand I think this is nicer since it makes a bit more data
readonly and slightly reduces allocations. On the other hand it
reduces readability somewhat.
If the readability is a concern to anyone I was thinking I could write
a macro that conditionally uses GCC's designated initializer
extension.
Tested by rebuilding on x86-64 Fedora 18, both natively and using the
mingw cross tools.
2013-12-19 Tom Tromey <tromey@redhat.com>
* ser-unix.c (hardwire_ops): New global.
(_initialize_ser_hardwire): Use it.
* ser-tcp.c (tcp_ops): New global.
(_initialize_ser_tcp): Use it.
* ser-pipe.c (pipe_ops): New global.
(_initialize_ser_pipe): Use it.
* ser-mingw.c (hardwire_ops, tty_ops, pipe_ops, tcp_ops): New
globals.
(_initialize_ser_windows): Use them.
Diffstat (limited to 'gdb/ser-pipe.c')
-rw-r--r-- | gdb/ser-pipe.c | 50 |
1 files changed, 26 insertions, 24 deletions
diff --git a/gdb/ser-pipe.c b/gdb/ser-pipe.c index 70bec5e..c4cef68 100644 --- a/gdb/ser-pipe.c +++ b/gdb/ser-pipe.c @@ -206,31 +206,33 @@ gdb_pipe (int pdes[2]) #endif } +static const struct serial_ops pipe_ops = +{ + "pipe", + pipe_open, + pipe_close, + NULL, + ser_base_readchar, + ser_base_write, + ser_base_flush_output, + ser_base_flush_input, + ser_base_send_break, + ser_base_raw, + ser_base_get_tty_state, + ser_base_copy_tty_state, + ser_base_set_tty_state, + ser_base_print_tty_state, + ser_base_noflush_set_tty_state, + ser_base_setbaudrate, + ser_base_setstopbits, + ser_base_drain_output, + ser_base_async, + ser_unix_read_prim, + ser_unix_write_prim +}; + void _initialize_ser_pipe (void) { - struct serial_ops *ops = XMALLOC (struct serial_ops); - - memset (ops, 0, sizeof (struct serial_ops)); - ops->name = "pipe"; - ops->open = pipe_open; - ops->close = pipe_close; - ops->readchar = ser_base_readchar; - ops->write = ser_base_write; - ops->flush_output = ser_base_flush_output; - ops->flush_input = ser_base_flush_input; - ops->send_break = ser_base_send_break; - ops->go_raw = ser_base_raw; - ops->get_tty_state = ser_base_get_tty_state; - ops->copy_tty_state = ser_base_copy_tty_state; - ops->set_tty_state = ser_base_set_tty_state; - ops->print_tty_state = ser_base_print_tty_state; - ops->noflush_set_tty_state = ser_base_noflush_set_tty_state; - ops->setbaudrate = ser_base_setbaudrate; - ops->setstopbits = ser_base_setstopbits; - ops->drain_output = ser_base_drain_output; - ops->async = ser_base_async; - ops->read_prim = ser_unix_read_prim; - ops->write_prim = ser_unix_write_prim; - serial_add_interface (ops); + serial_add_interface (&pipe_ops); } |