# HG changeset patch
# User Ali Saidi <[EMAIL PROTECTED]>
# Date 1220389563 14400
# Node ID 5de467c4d71880ff9767158561e8490c4afaeaf0
# Parent 6a27bc3fc267be638942ba02ac058812aaed86da
Make m5term use select() so OS X is happy.
diff --git a/util/term/term.c b/util/term/term.c
--- a/util/term/term.c
+++ b/util/term/term.c
@@ -144,49 +144,51 @@
void
readwrite(int nfd)
{
- struct pollfd pfd[2];
+ fd_set read_fds, write_fds;
char buf[BUFSIZ];
- int wfd = fileno(stdin), n, ret;
+ int wfd = fileno(stdin), n, ret, max_fd;
int lfd = fileno(stdout);
int escape = 0;
- /* Setup Network FD */
- pfd[0].fd = nfd;
- pfd[0].events = POLLIN;
- /* Setup STDIN FD */
- pfd[1].fd = wfd;
- pfd[1].events = POLLIN;
+ if (nfd == -1)
+ return;
- while (pfd[0].fd != -1) {
- if ((n = poll(pfd, 2, -1)) < 0) {
+ FD_ZERO(&read_fds);
+ FD_ZERO(&write_fds);
+
+ FD_SET(wfd, &read_fds);
+ FD_SET(nfd, &read_fds);
+ max_fd = nfd + 1;
+ printf("wfd: %d nfd: %d\n", wfd, nfd);
+
+ while (1) {
+ n = select(max_fd, &read_fds, &write_fds, NULL, NULL);
+ if (n < 0) {
close(nfd);
- err(1, "Polling Error");
+ perror("Select Error:");
}
- if (n == 0)
+ if (n == 0) {
return;
+ }
- if (pfd[0].revents & POLLIN) {
+ if (FD_ISSET(nfd, &read_fds)) {
if ((n = read(nfd, buf, sizeof(buf))) < 0)
return;
else if (n == 0) {
shutdown(nfd, SHUT_RD);
- pfd[0].fd = -1;
- pfd[0].events = 0;
} else {
if ((ret = atomicio(write, lfd, buf, n)) != n)
return;
}
}
- if (pfd[1].revents & POLLIN) {
+ if (FD_ISSET(wfd, &read_fds)) {
if ((n = read(wfd, buf, sizeof(buf))) < 0)
return;
else if (n == 0) {
shutdown(nfd, SHUT_WR);
- pfd[1].fd = -1;
- pfd[1].events = 0;
} else {
if (escape) {
char buf2[] = "~";
@@ -208,7 +210,10 @@
return;
}
}
- }
+ FD_ZERO(&read_fds);
+ FD_SET(wfd, &read_fds);
+ FD_SET(nfd, &read_fds);
+ } // while
}
void
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev