diff options
author | Fernando Nasser <fnasser@redhat.com> | 2001-05-11 18:34:13 +0000 |
---|---|---|
committer | Fernando Nasser <fnasser@redhat.com> | 2001-05-11 18:34:13 +0000 |
commit | baaec48fc998050a84ad0fcf292a139d6e1d45df (patch) | |
tree | a661090abc67680a8ce1c4d3531cb4069bf4118e /gdb | |
parent | afa485223abf187a17435a1cc536f90bfdcf59fb (diff) | |
download | gdb-baaec48fc998050a84ad0fcf292a139d6e1d45df.tar.gz |
2001-05-11 Fernando Nasser <fnasser@redhat.com>
* ser-unix.c (rate_to_code): Issue warning if baud rate is invalid.
(hardwire_setbaudrate): Set errno to EINVAL and return with error
if the conversion of the baud rate to code fails.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/ser-unix.c | 49 |
2 files changed, 47 insertions, 8 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1eaed0da7da..025865de367 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2001-05-11 Fernando Nasser <fnasser@redhat.com> + + * ser-unix.c (rate_to_code): Issue warning if baud rate is invalid. + (hardwire_setbaudrate): Set errno to EINVAL and return with error + if the conversion of the baud rate to code fails. + 2001-05-10 Andrew Cagney <ac131313@redhat.com> * ui-out.h (make_cleanup_ui_out_begin_end): Declare. diff --git a/gdb/ser-unix.c b/gdb/ser-unix.c index 4daf11f4973..ee17c122c78 100644 --- a/gdb/ser-unix.c +++ b/gdb/ser-unix.c @@ -741,9 +741,33 @@ rate_to_code (int rate) int i; for (i = 0; baudtab[i].rate != -1; i++) - if (rate == baudtab[i].rate) - return baudtab[i].code; - + { + /* test for perfect macth. */ + if (rate == baudtab[i].rate) + return baudtab[i].code; + else + { + /* check if it is in between valid values. */ + if (rate < baudtab[i].rate) + { + if (i) + { + warning ("Invalid baud rate %d. Closest values are %d and %d.", + rate, baudtab[i - 1].rate, baudtab[i].rate); + } + else + { + warning ("Invalid baud rate %d. Minimum value is %d.", + rate, baudtab[0].rate); + } + return -1; + } + } + } + + /* The requested speed was too large. */ + warning ("Invalid baud rate %d. Maximum value is %d.", + rate, baudtab[i - 1].rate); return -1; } @@ -751,13 +775,22 @@ static int hardwire_setbaudrate (serial_t scb, int rate) { struct hardwire_ttystate state; + int baud_code = rate_to_code (rate); + + if (baud_code < 0) + { + /* The baud rate was not valid. + A warning has already been issued. */ + errno = EINVAL; + return -1; + } if (get_tty_state (scb, &state)) return -1; #ifdef HAVE_TERMIOS - cfsetospeed (&state.termios, rate_to_code (rate)); - cfsetispeed (&state.termios, rate_to_code (rate)); + cfsetospeed (&state.termios, baud_code); + cfsetispeed (&state.termios, baud_code); #endif #ifdef HAVE_TERMIO @@ -766,12 +799,12 @@ hardwire_setbaudrate (serial_t scb, int rate) #endif state.termio.c_cflag &= ~(CBAUD | CIBAUD); - state.termio.c_cflag |= rate_to_code (rate); + state.termio.c_cflag |= baud_code; #endif #ifdef HAVE_SGTTY - state.sgttyb.sg_ispeed = rate_to_code (rate); - state.sgttyb.sg_ospeed = rate_to_code (rate); + state.sgttyb.sg_ispeed = baud_code; + state.sgttyb.sg_ospeed = baud_code; #endif return set_tty_state (scb, &state); |