summaryrefslogtreecommitdiff
path: root/gdb/ser-unix.c
diff options
context:
space:
mode:
authorFernando Nasser <fnasser@redhat.com>2001-05-11 18:34:13 +0000
committerFernando Nasser <fnasser@redhat.com>2001-05-11 18:34:13 +0000
commitbaaec48fc998050a84ad0fcf292a139d6e1d45df (patch)
treea661090abc67680a8ce1c4d3531cb4069bf4118e /gdb/ser-unix.c
parentafa485223abf187a17435a1cc536f90bfdcf59fb (diff)
downloadgdb-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/ser-unix.c')
-rw-r--r--gdb/ser-unix.c49
1 files changed, 41 insertions, 8 deletions
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);