svn commit: trunk/busybox/miscutils
vda at busybox.net
vda at busybox.net
Sun Feb 10 19:05:59 UTC 2008
Author: vda
Date: 2008-02-10 11:05:56 -0800 (Sun, 10 Feb 2008)
New Revision: 20974
Log:
microcom: read more than 1 byte from device, if possible
Modified:
trunk/busybox/miscutils/microcom.c
Changeset:
Modified: trunk/busybox/miscutils/microcom.c
===================================================================
--- trunk/busybox/miscutils/microcom.c 2008-02-10 19:02:53 UTC (rev 20973)
+++ trunk/busybox/miscutils/microcom.c 2008-02-10 19:05:56 UTC (rev 20974)
@@ -63,7 +63,7 @@
char *opt_d;
char *opt_t;
unsigned opts;
- opt_complementary = "=1"; /* exactly one arg should be there */
+ opt_complementary = "=1"; // exactly one arg should be there
opts = getopt32(argv, "Xs:d:t:", &opt_s, &opt_d, &opt_t);
// apply options
@@ -141,37 +141,39 @@
signalled = 0;
nfd = 2;
while (!signalled && safe_poll(pfd, nfd, timeout) > 0) {
- char c;
- if (pfd[0].revents) {
-serial_ready:
- // read from device -> write to stdout
- if (safe_read(sfd, &c, 1) > 0)
- write(STDOUT_FILENO, &c, 1);
- // else { EOF/error - what to do? }
- }
if (pfd[1].revents) {
- pfd[1].revents = 0;
+ char c;
// read from stdin -> write to device
if (safe_read(STDIN_FILENO, &c, 1) < 1) {
// don't poll stdin anymore if we got EOF/error
+ pfd[1].revents = 0;
nfd--;
- continue;
+ goto check_stdin;
}
// do we need special processing?
if (!(opts & OPT_X)) {
// ^@ sends Break
if (VINTR == c) {
tcsendbreak(sfd, 0);
- continue;
+ goto check_stdin;
}
// ^X exits
if (24 == c)
break;
}
write(sfd, &c, 1);
- if (delay >= 0 && safe_poll(pfd, 1, delay) > 0)
- goto serial_ready;
+ if (delay >= 0)
+ safe_poll(pfd, 1, delay);
}
+check_stdin:
+ if (pfd[0].revents) {
+ ssize_t len;
+ // read from device -> write to stdout
+ len = safe_read(sfd, bb_common_bufsiz1, sizeof(bb_common_bufsiz1));
+ if (len > 0)
+ full_write(STDOUT_FILENO, bb_common_bufsiz1, len);
+ // else { EOF/error - what to do? }
+ }
}
tcsetattr(sfd, TCSAFLUSH, &tiosfd);
More information about the busybox-cvs
mailing list