fix drawread, add changes from david tolpin
This commit is contained in:
parent
904f0d0b42
commit
e543c475e7
4 changed files with 36 additions and 32 deletions
|
|
@ -744,31 +744,28 @@ drawcoord(uchar *p, uchar *maxp, int oldx, int *newx)
|
|||
int
|
||||
_drawmsgread(Display *d, void *a, int n)
|
||||
{
|
||||
int inbuf;
|
||||
Client *cl;
|
||||
|
||||
qlock(&sdraw.lk);
|
||||
inbuf = d->obufp - d->obuf;
|
||||
if(n > inbuf)
|
||||
n = inbuf;
|
||||
memmove(a, d->obuf, n);
|
||||
inbuf -= n;
|
||||
if(inbuf)
|
||||
memmove(d->obuf, d->obufp-inbuf, inbuf);
|
||||
d->obufp = d->obuf+inbuf;
|
||||
cl = client0;
|
||||
if(cl->readdata == nil){
|
||||
werrstr("no draw data");
|
||||
goto err;
|
||||
}
|
||||
if(n < cl->nreaddata){
|
||||
werrstr("short read");
|
||||
goto err;
|
||||
}
|
||||
n = cl->nreaddata;
|
||||
memmove(a, cl->readdata, cl->nreaddata);
|
||||
free(cl->readdata);
|
||||
cl->readdata = nil;
|
||||
qunlock(&sdraw.lk);
|
||||
return n;
|
||||
}
|
||||
|
||||
static void
|
||||
drawmsgsquirrel(Display *d, void *a, int n)
|
||||
{
|
||||
uchar *ep;
|
||||
|
||||
ep = d->obuf + d->obufsize;
|
||||
if(d->obufp + n > ep)
|
||||
abort();
|
||||
memmove(d->obufp, a, n);
|
||||
d->obufp += n;
|
||||
err:
|
||||
qunlock(&sdraw.lk);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
|
|
@ -1086,7 +1083,12 @@ _drawmsgwrite(Display *d, void *v, int n)
|
|||
i->r.min.x, i->r.min.y, i->r.max.x, i->r.max.y,
|
||||
i->clipr.min.x, i->clipr.min.y,
|
||||
i->clipr.max.x, i->clipr.max.y);
|
||||
drawmsgsquirrel(d, ibuf, ni);
|
||||
free(client->readdata);
|
||||
client->readdata = malloc(ni);
|
||||
if(client->readdata == nil)
|
||||
goto Enomem;
|
||||
memmove(client->readdata, ibuf, ni);
|
||||
client->nreaddata = ni;
|
||||
client->infoid = -1;
|
||||
continue;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue