6 unloadimage(Image *i, Rectangle r, uchar *data, int ndata)
8 int bpl, n, chunk, dx, dy;
12 if(!rectinrect(r, i->r)){
13 werrstr("unloadimage: bad rectangle");
16 bpl = bytesperline(r, i->depth);
17 if(ndata < bpl*Dy(r)){
18 werrstr("unloadimage: buffer too small");
24 flushimage(d, 0); /* make sure subsequent flush is for us only */
25 while(r.min.y < r.max.y){
30 dx = ((chunk*dx)/bpl) & ~7;
31 n = bytesperline(Rect(r.min.x, r.min.y, r.min.x+dx, r.min.y+dy), i->depth);
32 if(unloadimage(i, Rect(r.min.x+dx, r.min.y, r.max.x, r.min.y+dy), data+n, bpl-n) < 0)
39 a = bufimage(d, 1+4+4*4);
41 werrstr("unloadimage: %r");
48 BPLONG(a+13, r.min.x+dx);
49 BPLONG(a+17, r.min.y+dy);
50 if(flushimage(d, 0) < 0)
52 if(read(d->fd, data, n) < 0)