From 30ba7529f1e58ba2be610a0c2581fa0f3fc23ab3 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Mon, 21 Sep 1998 00:01:26 +0000 Subject: Patch from Eric Norum: I fixed the problems noted by Victor Vengerov. 1) Fix typo in cfsetispeed(). 2) In rtems_termios_open, ensure that args->iop->data1 is set before calling device-specific open routine. --- c/src/exec/libcsupport/src/termios.c | 9 ++------- c/src/lib/libc/cfiospeed.c | 2 +- c/src/lib/libc/termios.c | 9 ++------- cpukit/libcsupport/src/termios.c | 9 ++------- 4 files changed, 7 insertions(+), 22 deletions(-) diff --git a/c/src/exec/libcsupport/src/termios.c b/c/src/exec/libcsupport/src/termios.c index f6b5652e57..f3637d37e3 100644 --- a/c/src/exec/libcsupport/src/termios.c +++ b/c/src/exec/libcsupport/src/termios.c @@ -285,20 +285,15 @@ rtems_termios_open ( tty->termios.c_cc[VWERASE] = '\027'; tty->termios.c_cc[VLNEXT] = '\026'; - /* - * Device-specific open - */ - if (tty->device.firstOpen) - (*tty->device.firstOpen)(major, minor, arg); - /* * Bump name characer */ if (c++ == 'z') c = 'a'; } - tty->refcount++; args->iop->data1 = tty; + if (!tty->refcount++ && tty->device.firstOpen) + (*tty->device.firstOpen)(major, minor, arg); rtems_semaphore_release (ttyMutex); return RTEMS_SUCCESSFUL; } diff --git a/c/src/lib/libc/cfiospeed.c b/c/src/lib/libc/cfiospeed.c index 772d6083c9..c2f40d3892 100644 --- a/c/src/lib/libc/cfiospeed.c +++ b/c/src/lib/libc/cfiospeed.c @@ -47,7 +47,7 @@ cfsetispeed(struct termios *tp, speed_t speed) errno = EINVAL; return -1; } - tp->c_cflag = (tp->c_cflag & ~CBAUD) | (speed * (CIBAUD / CBAUD)); + tp->c_cflag = (tp->c_cflag & ~CIBAUD) | (speed * (CIBAUD / CBAUD)); return 0; } diff --git a/c/src/lib/libc/termios.c b/c/src/lib/libc/termios.c index f6b5652e57..f3637d37e3 100644 --- a/c/src/lib/libc/termios.c +++ b/c/src/lib/libc/termios.c @@ -285,20 +285,15 @@ rtems_termios_open ( tty->termios.c_cc[VWERASE] = '\027'; tty->termios.c_cc[VLNEXT] = '\026'; - /* - * Device-specific open - */ - if (tty->device.firstOpen) - (*tty->device.firstOpen)(major, minor, arg); - /* * Bump name characer */ if (c++ == 'z') c = 'a'; } - tty->refcount++; args->iop->data1 = tty; + if (!tty->refcount++ && tty->device.firstOpen) + (*tty->device.firstOpen)(major, minor, arg); rtems_semaphore_release (ttyMutex); return RTEMS_SUCCESSFUL; } diff --git a/cpukit/libcsupport/src/termios.c b/cpukit/libcsupport/src/termios.c index f6b5652e57..f3637d37e3 100644 --- a/cpukit/libcsupport/src/termios.c +++ b/cpukit/libcsupport/src/termios.c @@ -285,20 +285,15 @@ rtems_termios_open ( tty->termios.c_cc[VWERASE] = '\027'; tty->termios.c_cc[VLNEXT] = '\026'; - /* - * Device-specific open - */ - if (tty->device.firstOpen) - (*tty->device.firstOpen)(major, minor, arg); - /* * Bump name characer */ if (c++ == 'z') c = 'a'; } - tty->refcount++; args->iop->data1 = tty; + if (!tty->refcount++ && tty->device.firstOpen) + (*tty->device.firstOpen)(major, minor, arg); rtems_semaphore_release (ttyMutex); return RTEMS_SUCCESSFUL; } -- cgit v1.2.3