tmore robust win - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 4b970769b9bbc68042daa320ca1bd28a73614502
 (DIR) parent 8ba3811378e9e10d0fc363e152ef7ea40a658463
 (HTM) Author: rsc <devnull@localhost>
       Date:   Sat,  5 Mar 2005 13:11:00 +0000
       
       more robust win
       
       Diffstat:
         M src/cmd/9term/win.c                 |      22 ++++++++++++++++++----
       
       1 file changed, 18 insertions(+), 4 deletions(-)
       ---
 (DIR) diff --git a/src/cmd/9term/win.c b/src/cmd/9term/win.c
       t@@ -63,7 +63,7 @@ Channel *cwait;
        int pid = -1;
        
        int        label(char*, int);
       -void        error(char*);
       +void        error(char*, ...);
        void        stdinproc(void*);
        void        stdoutproc(void*);
        void        type(Event*, int, CFid*, CFid*);
       t@@ -206,8 +206,15 @@ threadmain(int argc, char **argv)
        }
        
        void
       -error(char *s)
       +error(char *s, ...)
        {
       +        va_list arg;
       +        
       +        if(s){
       +                va_start(arg, s);
       +                s = vsmprint(s, arg);
       +                va_end(arg);
       +        }
                if(s)
                        fprint(2, "win: %s: %r\n", s);
                else
       t@@ -478,8 +485,15 @@ stdoutproc(void *v)
                                buf[n] = 0;
                                qlock(&q.lk);
                                m = sprint(x, "#%d", q.p);
       -                        if(fswrite(afd, x, m) != m)
       -                                error("stdout writing address");
       +                        if(fswrite(afd, x, m) != m){
       +                                fprint(2, "stdout writing address: %r; resetting\n");
       +                                fswrite(afd, "$", 1);
       +                                m = fsread(afd, x, sizeof x-1);
       +                                if(m >= 0){
       +                                        x[m] = 0;
       +                                        q.p = atoi(x);
       +                                }
       +                        }
                                if(fswrite(dfd, buf, n) != n)
                                        error("stdout writing body");
                                q.p += nrunes(buf, n);