events buffer need not end in NUL

This commit is contained in:
rsc 2006-02-21 20:46:49 +00:00
parent c42a1d3d61
commit 95409400f7
3 changed files with 9 additions and 6 deletions

View file

@ -346,7 +346,7 @@ readfile(char *dir, char *name, int *np)
len = d->length; len = d->length;
free(d); free(d);
data = emalloc(len+1); data = emalloc(len+1);
fsread(fid, data, len); len = fsreadn(fid, data, len);
fsclose(fid); fsclose(fid);
if(np != nil) if(np != nil)
*np = len; *np = len;

View file

@ -679,7 +679,7 @@ winevent(Window *w, char *fmt, ...)
if(b == nil) if(b == nil)
error("vsmprint failed"); error("vsmprint failed");
n = strlen(b); 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; w->events[w->nevents++] = w->owner;
memmove(w->events+w->nevents, b, n); memmove(w->events+w->nevents, b, n);
free(b); free(b);

View file

@ -976,7 +976,6 @@ void
xfideventread(Xfid *x, Window *w) xfideventread(Xfid *x, Window *w)
{ {
Fcall fc; Fcall fc;
char *b;
int i, n; int i, n;
i = 0; i = 0;
@ -1000,10 +999,14 @@ xfideventread(Xfid *x, Window *w)
fc.count = n; fc.count = n;
fc.data = w->events; fc.data = w->events;
respond(x, &fc, nil); respond(x, &fc, nil);
b = w->events;
w->events = estrdup(w->events+n);
free(b);
w->nevents -= n; 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 void