I finally sat down and made the m5term work with OS X. I haven't tested it that much, so please give it a try and let me know if anything is broken.
Ali On Sep 2, 2008, at 5:07 PM, Ali Saidi wrote: > # 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 > m5-dev@m5sim.org > http://m5sim.org/mailman/listinfo/m5-dev _______________________________________________ m5-dev mailing list m5-dev@m5sim.org http://m5sim.org/mailman/listinfo/m5-dev