tAmazingly picky bug fixes from Valgrind. - 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 15680d56a6c6e15921d958aa6006825c2cd20bf8
 (DIR) parent 230d62c4756ece47951e96a7cb1b5b72cf6a3844
 (HTM) Author: rsc <devnull@localhost>
       Date:   Fri,  5 Mar 2004 05:53:11 +0000
       
       Amazingly picky bug fixes from Valgrind.
       
       Diffstat:
         M src/cmd/acme/util.c                 |       4 ++--
         M src/cmd/plumb/plumber.c             |       7 ++++++-
         M src/cmd/plumb/rules.c               |       1 +
         M src/libdraw/font.c                  |       2 +-
         M src/libdraw/stringwidth.c           |       2 +-
         M src/libframe/frbox.c                |       5 ++++-
         M src/libfs/read.c                    |       3 ++-
         M src/libfs/write.c                   |       3 ++-
         M src/libthread/main.c                |       2 +-
       
       9 files changed, 20 insertions(+), 9 deletions(-)
       ---
 (DIR) diff --git a/src/cmd/acme/util.c b/src/cmd/acme/util.c
       t@@ -298,7 +298,7 @@ tgetc(void *a, uint n)
        Rune*
        skipbl(Rune *r, int n, int *np)
        {
       -        while(n>0 && *r==' ' || *r=='\t' || *r=='\n'){
       +        while(n>0 && (*r==' ' || *r=='\t' || *r=='\n')){
                        --n;
                        r++;
                }
       t@@ -309,7 +309,7 @@ skipbl(Rune *r, int n, int *np)
        Rune*
        findbl(Rune *r, int n, int *np)
        {
       -        while(n>0 && *r!=' ' && *r!='\t' && *r!='\n'){
       +        while(n>0 && (*r!=' ' && *r!='\t' && *r!='\n')){
                        --n;
                        r++;
                }
 (DIR) diff --git a/src/cmd/plumb/plumber.c b/src/cmd/plumb/plumber.c
       t@@ -29,14 +29,18 @@ void
        threadmain(int argc, char *argv[])
        {
                char buf[512];
       -        int fd;
       +        int fd, dofork;
        
                progname = "plumber";
       +        dofork = 1;
        
                ARGBEGIN{
                case 'd':
                        debug = 1;
                        break;
       +        case 'f':
       +                dofork = 0;
       +                break;
                case 'p':
                        plumbfile = ARGF();
                        break;
       t@@ -66,6 +70,7 @@ threadmain(int argc, char *argv[])
                 * Start all processes and threads from other proc
                 * so we (main pid) can return to user.
                 */
       +        if(dofork)
                switch(fork()){
                case -1:
                        sysfatal("fork: %r");
 (DIR) diff --git a/src/cmd/plumb/rules.c b/src/cmd/plumb/rules.c
       t@@ -741,6 +741,7 @@ morerules(uchar *text, int done)
                        ;
                while((rs=readruleset()) != nil){
                        rules = erealloc(rules, (n+2)*sizeof(Ruleset*));
       +                fprint(2, "initialize rules %d %d\n", n, n+1);
                        rules[n++] = rs;
                        rules[n] = nil;
                }
 (DIR) diff --git a/src/libdraw/font.c b/src/libdraw/font.c
       t@@ -28,7 +28,7 @@ cachechars(Font *f, char **ss, Rune **rr, ushort *cp, int max, int *wp, char **s
                }
                wid = 0;
                *subfontname = 0;
       -        for(i=0; (*sp || *rp) && i<max; sp+=w, rp+=rw){
       +        for(i=0; i<max && (*sp || *rp); sp+=w, rp+=rw){
                        if(ss){
                                r = *(uchar*)sp;
                                if(r < Runeself)
 (DIR) diff --git a/src/libdraw/stringwidth.c b/src/libdraw/stringwidth.c
       t@@ -25,7 +25,7 @@ _stringnwidth(Font *f, char *s, Rune *r, int len)
                }else
                        rptr = &r;
                twid = 0;
       -        while((*s || *r) && len){
       +        while(len && (*s || *r)){
                        max = Max;
                        if(len < max)
                                max = len;
 (DIR) diff --git a/src/libframe/frbox.c b/src/libframe/frbox.c
       t@@ -115,9 +115,12 @@ static
        void
        chopbox(Frame *f, Frbox *b, int n)        /* drop first n chars; no allocation done */
        {
       +        char *p;
       +        
                if(b->nrune<0 || b->nrune<n)
                        drawerror(f->display, "chopbox");
       -        strcpy((char*)b->ptr, (char*)runeindex(b->ptr, n));
       +        p = (char*)runeindex(b->ptr, n);
       +        memmove((char*)b->ptr, p, strlen(p)+1);
                b->nrune -= n;
                b->wid = stringwidth(f->font, (char *)b->ptr);
        }
 (DIR) diff --git a/src/libfs/read.c b/src/libfs/read.c
       t@@ -28,7 +28,8 @@ fprint(2, "n %d msize %d\n", n, msize);
                        tx.offset = offset;
                tx.count = n;
        
       -        fsrpc(fid->fs, &tx, &rx, &freep);
       +        if(fsrpc(fid->fs, &tx, &rx, &freep) < 0)
       +                return -1;
                if(rx.type == Rerror){
                        werrstr("%s", rx.ename);
                        free(freep);
 (DIR) diff --git a/src/libfs/write.c b/src/libfs/write.c
       t@@ -24,7 +24,8 @@ _fspwrite(Fid *fid, void *buf, long n, vlong offset)
                tx.count = n;
                tx.data = buf;
        
       -        fsrpc(fid->fs, &tx, &rx, &freep);
       +        if(fsrpc(fid->fs, &tx, &rx, &freep) < 0)
       +                return -1;
                if(rx.type == Rerror){
                        werrstr("%s", rx.ename);
                        free(freep);
 (DIR) diff --git a/src/libthread/main.c b/src/libthread/main.c
       t@@ -45,7 +45,7 @@ main(int argc, char **argv)
        
                signal(SIGTERM, _threaddie);
                signal(SIGCHLD, _nop);
       -        signal(SIGINFO, _threadstatus);
       +//        signal(SIGINFO, _threadstatus);
        //        rfork(RFREND);
        
        //_threaddebuglevel = (DBGSCHED|DBGCHAN|DBGREND)^~0;