delay reconfig of input tty until target device has been both opened

and configured correctly.
This commit is contained in:
Paul Fox 2008-04-23 15:31:29 +00:00
parent 765c1c3c31
commit a50a9b0fdf

View File

@ -96,14 +96,6 @@ int microcom_main(int argc ATTRIBUTE_UNUSED, char **argv)
// error exit code if we fail to open the device // error exit code if we fail to open the device
signalled = 1; signalled = 1;
// put stdin to "raw mode" (if stdin is a TTY),
// handle one character at a time
if (isatty(STDIN_FILENO)) {
xget1(STDIN_FILENO, &tio, &tio0);
if (xset1(STDIN_FILENO, &tio, "stdin"))
goto done;
}
// open device // open device
sfd = open_or_warn(argv[0], O_RDWR | O_NOCTTY | O_NONBLOCK); sfd = open_or_warn(argv[0], O_RDWR | O_NOCTTY | O_NONBLOCK);
if (sfd < 0) if (sfd < 0)
@ -112,11 +104,18 @@ int microcom_main(int argc ATTRIBUTE_UNUSED, char **argv)
// put device to "raw mode" // put device to "raw mode"
xget1(sfd, &tio, &tiosfd); xget1(sfd, &tio, &tiosfd);
// tio.c_cflag |= (CREAD|HUPCL); // we just bail out on any device error
// set device speed // set device speed
cfsetspeed(&tio, tty_value_to_baud(speed)); cfsetspeed(&tio, tty_value_to_baud(speed));
if (xset1(sfd, &tio, argv[0])) if (xset1(sfd, &tio, argv[0]))
goto restore0_and_done; goto done;
// put stdin to "raw mode" (if stdin is a TTY),
// handle one character at a time
if (isatty(STDIN_FILENO)) {
xget1(STDIN_FILENO, &tio, &tio0);
if (xset1(STDIN_FILENO, &tio, "stdin"))
goto done;
}
// main loop: check with poll(), then read/write bytes across // main loop: check with poll(), then read/write bytes across
pfd[0].fd = sfd; pfd[0].fd = sfd;
@ -169,7 +168,6 @@ skip_write: ;
// restore device mode // restore device mode
tcsetattr(sfd, TCSAFLUSH, &tiosfd); tcsetattr(sfd, TCSAFLUSH, &tiosfd);
restore0_and_done:
if (isatty(STDIN_FILENO)) if (isatty(STDIN_FILENO))
tcsetattr(STDIN_FILENO, TCSAFLUSH, &tio0); tcsetattr(STDIN_FILENO, TCSAFLUSH, &tio0);