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

Reply via email to