Blame


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>
4 b6afd33e 2003-11-23 devnull
5 b6afd33e 2003-11-23 devnull typedef struct Block Block;
6 b6afd33e 2003-11-23 devnull
7 b6afd33e 2003-11-23 devnull struct Block
8 b6afd33e 2003-11-23 devnull {
9 b6afd33e 2003-11-23 devnull uchar *pos;
10 b6afd33e 2003-11-23 devnull uchar *limit;
11 b6afd33e 2003-11-23 devnull };
12 b6afd33e 2003-11-23 devnull
13 b6afd33e 2003-11-23 devnull static int
14 b6afd33e 2003-11-23 devnull blread(void *vb, void *buf, int n)
15 b6afd33e 2003-11-23 devnull {
16 b6afd33e 2003-11-23 devnull Block *b;
17 b6afd33e 2003-11-23 devnull
18 b6afd33e 2003-11-23 devnull b = vb;
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;
24 b6afd33e 2003-11-23 devnull }
25 b6afd33e 2003-11-23 devnull
26 b6afd33e 2003-11-23 devnull static int
27 b6afd33e 2003-11-23 devnull blwrite(void *vb, void *buf, int n)
28 b6afd33e 2003-11-23 devnull {
29 b6afd33e 2003-11-23 devnull Block *b;
30 b6afd33e 2003-11-23 devnull
31 b6afd33e 2003-11-23 devnull b = vb;
32 b6afd33e 2003-11-23 devnull
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;
38 b6afd33e 2003-11-23 devnull }
39 b6afd33e 2003-11-23 devnull
40 b6afd33e 2003-11-23 devnull int
41 b6afd33e 2003-11-23 devnull deflateblock(uchar *dst, int dsize, uchar *src, int ssize, int level, int debug)
42 b6afd33e 2003-11-23 devnull {
43 b6afd33e 2003-11-23 devnull Block bd, bs;
44 b6afd33e 2003-11-23 devnull int ok;
45 b6afd33e 2003-11-23 devnull
46 b6afd33e 2003-11-23 devnull bs.pos = src;
47 b6afd33e 2003-11-23 devnull bs.limit = src + ssize;
48 b6afd33e 2003-11-23 devnull
49 b6afd33e 2003-11-23 devnull bd.pos = dst;
50 b6afd33e 2003-11-23 devnull bd.limit = dst + dsize;
51 b6afd33e 2003-11-23 devnull
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;
56 b6afd33e 2003-11-23 devnull }