1 b6afd33e 2003-11-23 devnull #include <u.h>
2 b6afd33e 2003-11-23 devnull #include <libc.h>
3 b6afd33e 2003-11-23 devnull #include <flate.h>
5 b6afd33e 2003-11-23 devnull typedef struct Block Block;
7 b6afd33e 2003-11-23 devnull struct Block
9 b6afd33e 2003-11-23 devnull uchar *pos;
10 b6afd33e 2003-11-23 devnull uchar *limit;
13 b6afd33e 2003-11-23 devnull static int
14 b6afd33e 2003-11-23 devnull blread(void *vb, void *buf, int n)
16 b6afd33e 2003-11-23 devnull Block *b;
19 b6afd33e 2003-11-23 devnull if(n > b->limit - b->pos)
20 b6afd33e 2003-11-23 devnull n = b->limit - b->pos;
21 b6afd33e 2003-11-23 devnull memmove(buf, b->pos, n);
22 b6afd33e 2003-11-23 devnull b->pos += n;
23 b6afd33e 2003-11-23 devnull return n;
26 b6afd33e 2003-11-23 devnull static int
27 b6afd33e 2003-11-23 devnull blwrite(void *vb, void *buf, int n)
29 b6afd33e 2003-11-23 devnull Block *b;
33 b6afd33e 2003-11-23 devnull if(n > b->limit - b->pos)
34 b6afd33e 2003-11-23 devnull n = b->limit - b->pos;
35 b6afd33e 2003-11-23 devnull memmove(b->pos, buf, n);
36 b6afd33e 2003-11-23 devnull b->pos += n;
37 b6afd33e 2003-11-23 devnull return n;
41 b6afd33e 2003-11-23 devnull deflateblock(uchar *dst, int dsize, uchar *src, int ssize, int level, int debug)
43 b6afd33e 2003-11-23 devnull Block bd, bs;
46 b6afd33e 2003-11-23 devnull bs.pos = src;
47 b6afd33e 2003-11-23 devnull bs.limit = src + ssize;
49 b6afd33e 2003-11-23 devnull bd.pos = dst;
50 b6afd33e 2003-11-23 devnull bd.limit = dst + dsize;
52 b6afd33e 2003-11-23 devnull ok = deflate(&bd, blwrite, &bs, blread, level, debug);
53 b6afd33e 2003-11-23 devnull if(ok != FlateOk)
54 b6afd33e 2003-11-23 devnull return ok;
55 b6afd33e 2003-11-23 devnull return bd.pos - dst;