plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

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 }