Thread View: net.bugs.4bsd
1 messages
1 total messages
Started by James P. Kiely
Fri, 19 Sep 1986 20:29
multiple NULLs read on BREAK if RAW/COOKED is toggled
Author: James P. Kiely
Date: Fri, 19 Sep 1986 20:29
Date: Fri, 19 Sep 1986 20:29
86 lines
3321 bytes
3321 bytes
Subject: multiple NULLs read on BREAK if RAW/COOKED is toggled
Index: sys/sys/tty.c or sys/{vaxuba,is68kdev}/dh.c
Type: bug
Priority: high
Description:
When reading in RAW mode, multiple '\0' characters are read from
the standard input when the line is toggled between RAW and COOKED
in the loop that does the read if a BREAK is typed at the terminal
(under certain conditions). One '\0' is expected.
NOTE: This problem is hardware dependent. It has been
reproduced on a VAX 8200 running Ultrix with a DEC DH/U board
but does not occur on the same VAX 8200 with Emulex or Able
boards running in DH emulation mode.
The bug also occurs on an Integrated Solutions Optimum 5/10
(QBus - 68010 CPU) running 4.2BSD (ISI3.05 distribution) with
an Emulex DH board (CS02).
Repeat-By:
Run the following program.
(This test program demonstrates a problem with /etc/getty).
--------------------------CUT HERE-----------------------------------
/*
* just type your input and it will be echoed (parity bits and all)
* type EOT to exit
*/
#define EOT '\004'
#include <stdio.h>
#include <sys/ioctl.h>
main()
{
char c;
int ldisc = OTTYDISC;
struct sgttyb ttybuf;
/* ioctl(0, TIOCSETD, 0); /* not really necessary - does
it for both old & new tty drivers */
ioctl(0, TIOCGETP, &ttybuf);
ttybuf.sg_flags |= RAW; /* stty raw -echo */
ttybuf.sg_flags &= ~ECHO;
ioctl(0, TIOCSETP, &ttybuf);
/* the read loop */
do {
ttybuf.sg_flags &= ~RAW; /* stty -raw */
ioctl(0, TIOCSETP, &ttybuf);
ttybuf.sg_flags |= RAW; /* stty raw */
ioctl(0, TIOCSETP, &ttybuf);
read(0, &c, 1);
fprintf(stderr, "%c (== %#o)\r\n", c, c);
} while ((c&0177) != EOT);
ttybuf.sg_flags |= ECHO; /* stty -raw echo */
ttybuf.sg_flags &= ~RAW;
ioctl(0, TIOCSETP, &ttybuf);
}
--------------------CUT HERE-------------------------------------------------
If the problem exists with your hardware configuration, you will
get multiple lines like
(== 0)
(== 0)
(== 0)
(== 0)
when you type <BREAK> on your terminal.
Discussion:
TIOCSETP should cause the interface to delay until the output
is quiescent, then throw away any unread characters, before
changing the modes. It would appear that this is not happening.
While it could be argued that this is a hard/firmware problem since
it occurs with some hardware but not with other hardware, I believe
that the problem is either in the tty driver or the dh driver.
--
NAME: James P. Kiely USPS: Lown Cardiovascular Laboratory
USENET: ...!harvard!lownlab!kiely Harvard School of Public Health
PHONE: +1 617 732 1307 665 Huntington Avenue
Boston, MA 02115-9915
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads