deflateblock.c (787B)
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 }