tClean up yacc files in mkcommon, mkhdr. Add nan to lib9. Fix memory corruption bugs in 9term. - 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 dff7e27317f911dcfacaf30eb3ec4f3269f25a62
 (DIR) parent c5b9ff9fa8f7a65939c3592572a3df1b60dcf57e
 (HTM) Author: rsc <devnull@localhost>
       Date:   Thu,  4 Dec 2003 19:16:29 +0000
       
       Clean up yacc files in mkcommon, mkhdr.
       Add nan to lib9.
       Fix memory corruption bugs in 9term.
       
       Diffstat:
         M src/cmd/9term/9term.c               |      41 +++++++++++++++++++++----------
         M src/lib9/mkfile                     |       1 +
         M src/mkcommon                        |       4 ++--
         M src/mkhdr                           |       2 ++
       
       4 files changed, 33 insertions(+), 15 deletions(-)
       ---
 (DIR) diff --git a/src/cmd/9term/9term.c b/src/cmd/9term/9term.c
       t@@ -361,6 +361,8 @@ mouse(void)
                                                wordclick(&q0, &q1);
                                        if(q0 == q1)
                                                break;
       +                                t.q0 = t.q1 = t.nr;
       +                                updatesel();
                                        paste(t.r+q0, q1-q0, 1);
                                        if(t.r[q1-1] != '\n')
                                                paste(Lnl, 1, 1);
       t@@ -384,7 +386,7 @@ mselect(void)
        
                b = t.m.buttons;
                q0 = frcharofpt(t.f, t.m.xy) + t.org;
       -        if(t.m.msec-clickmsec<500 && clickq0 == q0 && t.q0==t.q1 && b==1){
       +        if(t.m.msec-clickmsec<500 && clickq0==q0 && t.q0==t.q1 && b==1){
                        doubleclick(&t.q0, &t.q1);
                        updatesel();
        /*                t.t.i->flush(); */
       t@@ -408,19 +410,19 @@ mselect(void)
                        clickmsec = t.m.msec;
                        clickq0 = t.q0;
                }
       -        if((t.m.buttons != b) && (b&1)){
       -                enum {Cancut = 1, Canpaste = 2} state = Cancut | Canpaste;
       +        if((t.m.buttons != b) &&(b&1)){
       +                enum{Cancut = 1, Canpaste = 2} state = Cancut | Canpaste;
                        while(t.m.buttons){
       -                        if(t.m.buttons&2) {
       -                                if (state&Cancut) {
       +                        if(t.m.buttons&2){
       +                                if(state&Cancut){
                                                snarf();
                                                cut();
                                                state = Canpaste;
                                        }
       -                        } else if (t.m.buttons&4) {
       -                                if (state&Canpaste) {
       +                        }else if(t.m.buttons&4){
       +                                if(state&Canpaste){
                                                snarfupdate();
       -                                        if (t.nsnarf) {
       +                                        if(t.nsnarf){
                                                        paste(t.snarf, t.nsnarf, 0);
                                                }
                                                state = Cancut|Canpaste;
       t@@ -841,7 +843,6 @@ cut(void)
        void
        snarfupdate(void)
        {
       -
                char *pp;
                int n, i;
                Rune *p;
       t@@ -861,29 +862,31 @@ snarfupdate(void)
        
        }
        
       +char sbuf[SnarfSize];
        void
        snarf(void)
        {
       -        char buf[SnarfSize], *p;
       +        char *p;
                int i, n;
                Rune *rp;
        
                if(t.q1 == t.q0)
                        return;
                n = t.q1-t.q0;
       -        t.snarf =  runerealloc(t.snarf, n);
       -        for(i=0,p=buf,rp=t.snarf; i<n && p < buf + SnarfSize-UTFmax; i++){
       +        t.snarf = runerealloc(t.snarf, n);
       +        for(i=0,p=sbuf,rp=t.snarf; i<n && p < sbuf+SnarfSize-UTFmax; i++){
                        *rp++ = *(t.r+t.q0+i);
                        p += runetochar(p, t.r+t.q0+i);
                }
                t.nsnarf = rp-t.snarf;
                *p = '\0';
       -        putsnarf(buf);
       +        putsnarf(sbuf);
        }
        
        void
        paste(Rune *r, int n, int advance)
        {
       +        Rune *rbuf;
                uint m;
                uint q0;
        
       t@@ -908,6 +911,17 @@ paste(Rune *r, int n, int advance)
                        t.nr -= m;
                        runemove(t.r, t.r+m, t.nr);
                }
       +
       +        /*
       +         * if this is a button2 execute then we might have been passed
       +         * runes inside the buffer.  must save them before realloc.
       +         */
       +        rbuf = nil;
       +        if(t.r <= r && r < t.r+n){
       +                rbuf = runemalloc(n);
       +                runemove(rbuf, r, n);
       +                r = rbuf;
       +        }
                t.r = runerealloc(t.r, t.nr+n);
                q0 = t.q0;
                runemove(t.r+q0+n, t.r+q0, t.nr-q0);
       t@@ -925,6 +939,7 @@ paste(Rune *r, int n, int advance)
                        t.q0 += n;
                t.q1 += n;
                updatesel();
       +        free(rbuf);
        }
        
        void
 (DIR) diff --git a/src/lib9/mkfile b/src/lib9/mkfile
       t@@ -42,6 +42,7 @@ OFILES=\
                main.$O\
                malloctag.$O\
                mallocz.$O\
       +        nan.$O\
                needsrcquote.$O\
                netmkaddr.$O\
                notify.$O\
 (DIR) diff --git a/src/mkcommon b/src/mkcommon
       t@@ -14,10 +14,10 @@ clean:V: clean-common
        %.clean:V: %.clean-common
        
        nuke-common:V:
       -        rm -f *.[$OS] [$OS].out $CLEANFILES $NUKEFILES
       +        rm -f *.[$OS] [$OS].out $CLEANFILES y.tab.[ch] $NUKEFILES
        
        clean-common:
       -        rm -f *.[$OS] [$OS].out $CLEANFILES
       +        rm -f *.[$OS] [$OS].out $CLEANFILES y.tab.[ch]
        
        %.clean-common:V:
                rm -f $stem.[$OS] [$OS].$stem $stem.acid $stem
 (DIR) diff --git a/src/mkhdr b/src/mkhdr
       t@@ -20,6 +20,8 @@ LDFLAGS=
        AFLAGS=
        CLEANFILES=
        NUKEFILES=
       +YACC=yacc
       +YFLAGS=-d
        
        <|cat $PLAN9/src/mk.$SYSNAME-$OBJTYPE 2>/dev/null || true