]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libflate/deflateblock.c
qer(8): correct man page example (thanks, kenji)
[plan9front.git] / sys / src / libflate / deflateblock.c
1 #include <u.h>
2 #include <libc.h>
3 #include <flate.h>
4
5 typedef struct Block    Block;
6
7 struct Block
8 {
9         uchar   *pos;
10         uchar   *limit;
11 };
12
13 static int
14 blread(void *vb, void *buf, int n)
15 {
16         Block *b;
17
18         b = vb;
19         if(n > b->limit - b->pos)
20                 n = b->limit - b->pos;
21         memmove(buf, b->pos, n);
22         b->pos += n;
23         return n;
24 }
25
26 static int
27 blwrite(void *vb, void *buf, int n)
28 {
29         Block *b;
30
31         b = vb;
32
33         if(n > b->limit - b->pos)
34                 n = b->limit - b->pos;
35         memmove(b->pos, buf, n);
36         b->pos += n;
37         return n;
38 }
39
40 int
41 deflateblock(uchar *dst, int dsize, uchar *src, int ssize, int level, int debug)
42 {
43         Block bd, bs;
44         int ok;
45
46         bs.pos = src;
47         bs.limit = src + ssize;
48
49         bd.pos = dst;
50         bd.limit = dst + dsize;
51
52         ok = deflate(&bd, blwrite, &bs, blread, level, debug);
53         if(ok != FlateOk)
54                 return ok;
55         return bd.pos - dst;
56 }