tevents buffer need not end in NUL - 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 95409400f71c426d4ef5811f5dbdf1c0778464f5
 (DIR) parent c42a1d3d6168df56f966ea1f3ba3ef39ebbff4e4
 (HTM) Author: rsc <devnull@localhost>
       Date:   Tue, 21 Feb 2006 20:46:49 +0000
       
       events buffer need not end in NUL
       
       Diffstat:
         M src/cmd/acme/mail/mesg.c            |       2 +-
         M src/cmd/acme/wind.c                 |       2 +-
         M src/cmd/acme/xfid.c                 |      11 +++++++----
       
       3 files changed, 9 insertions(+), 6 deletions(-)
       ---
 (DIR) diff --git a/src/cmd/acme/mail/mesg.c b/src/cmd/acme/mail/mesg.c
       t@@ -346,7 +346,7 @@ readfile(char *dir, char *name, int *np)
                        len = d->length;
                free(d);
                data = emalloc(len+1);
       -        fsread(fid, data, len);
       +        len = fsreadn(fid, data, len);
                fsclose(fid);
                if(np != nil)
                        *np = len;
 (DIR) diff --git a/src/cmd/acme/wind.c b/src/cmd/acme/wind.c
       t@@ -679,7 +679,7 @@ winevent(Window *w, char *fmt, ...)
                if(b == nil)
                        error("vsmprint failed");
                n = strlen(b);
       -        w->events = realloc(w->events, w->nevents+1+n);
       +        w->events = erealloc(w->events, w->nevents+1+n);
                w->events[w->nevents++] = w->owner;
                memmove(w->events+w->nevents, b, n);
                free(b);
 (DIR) diff --git a/src/cmd/acme/xfid.c b/src/cmd/acme/xfid.c
       t@@ -976,7 +976,6 @@ void
        xfideventread(Xfid *x, Window *w)
        {
                Fcall fc;
       -        char *b;
                int i, n;
        
                i = 0;
       t@@ -1000,10 +999,14 @@ xfideventread(Xfid *x, Window *w)
                fc.count = n;
                fc.data = w->events;
                respond(x, &fc, nil);
       -        b = w->events;
       -        w->events = estrdup(w->events+n);
       -        free(b);
                w->nevents -= n;
       +        if(w->nevents){
       +                memmove(w->events, w->events+n, w->nevents);
       +                w->events = erealloc(w->events, w->nevents);
       +        }else{
       +                free(w->events);
       +                w->events = nil;
       +        }
        }
        
        void