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
> [email protected]
> http://m5sim.org/mailman/listinfo/m5-dev
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev