aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/ser-unix.c49
2 files changed, 47 insertions, 8 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 1eaed0d..025865d 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 4daf11f..ee17c12 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);