diff options
author | June McEnroe <june@causal.agency> | 2018-05-13 15:05:42 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2018-05-13 15:05:42 -0400 |
commit | 46ca1b2c2d97e015e5adbb987aece10da0c5d917 (patch) | |
tree | 08f3003fe5a338de3a64ad9fa19d8e875410a8e8 | |
parent | Add modem (diff) | |
download | src-46ca1b2c2d97e015e5adbb987aece10da0c5d917.tar.gz src-46ca1b2c2d97e015e5adbb987aece10da0c5d917.zip |
Clean up modem loop
Diffstat (limited to '')
-rw-r--r-- | bin/modem.c | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/bin/modem.c b/bin/modem.c index 11b447ea..c099119a 100644 --- a/bin/modem.c +++ b/bin/modem.c @@ -65,30 +65,22 @@ int main(int argc, char *argv[]) { err(EX_NOINPUT, "%s", argv[1]); } - for (;;) { - usleep(8 * 1000000 / BAUD_RATE); - - struct pollfd fds[2] = { - { .events = POLLIN, .fd = STDIN_FILENO }, - { .events = POLLIN, .fd = pty }, - }; - int n = poll(fds, 2, -1); - if (n < 0) err(EX_IOERR, "poll"); - + char c; + struct pollfd fds[2] = { + { .events = POLLIN, .fd = STDIN_FILENO }, + { .events = POLLIN, .fd = pty }, + }; + while (usleep(8 * 1000000 / BAUD_RATE), 0 < poll(fds, 2, -1)) { if (fds[0].revents) { - char c; ssize_t size = read(STDIN_FILENO, &c, 1); if (size < 0) err(EX_IOERR, "read(%d)", STDIN_FILENO); - size = write(pty, &c, 1); if (size < 0) err(EX_IOERR, "write(%d)", pty); } if (fds[1].revents) { - char c; ssize_t size = read(pty, &c, 1); if (size < 0) err(EX_IOERR, "read(%d)", pty); - size = write(STDOUT_FILENO, &c, 1); if (size < 0) err(EX_IOERR, "write(%d)", STDOUT_FILENO); } @@ -98,4 +90,5 @@ int main(int argc, char *argv[]) { if (dead < 0) err(EX_OSERR, "waitpid"); if (dead) return WIFEXITED(status) ? WEXITSTATUS(status) : EX_SOFTWARE; } + err(EX_IOERR, "poll"); } |