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 #include "zlib.h"
5 b6afd33e 2003-11-23 devnull
6 b6afd33e 2003-11-23 devnull int
7 b6afd33e 2003-11-23 devnull deflatezlibblock(uchar *dst, int dsize, uchar *src, int ssize, int level, int debug)
8 b6afd33e 2003-11-23 devnull {
9 b6afd33e 2003-11-23 devnull ulong adler;
10 b6afd33e 2003-11-23 devnull int n;
11 b6afd33e 2003-11-23 devnull
12 b6afd33e 2003-11-23 devnull if(dsize < 6)
13 b6afd33e 2003-11-23 devnull return FlateOutputFail;
14 b6afd33e 2003-11-23 devnull
15 b6afd33e 2003-11-23 devnull n = deflateblock(dst + 2, dsize - 6, src, ssize, level, debug);
16 b6afd33e 2003-11-23 devnull if(n < 0)
17 b6afd33e 2003-11-23 devnull return n;
18 b6afd33e 2003-11-23 devnull
19 b6afd33e 2003-11-23 devnull dst[0] = ZlibDeflate | ZlibWin32k;
20 b6afd33e 2003-11-23 devnull
21 b6afd33e 2003-11-23 devnull /* bogus zlib encoding of compression level */
22 b6afd33e 2003-11-23 devnull dst[1] = ((level > 2) + (level > 5) + (level > 8)) << 6;
23 b6afd33e 2003-11-23 devnull
24 b6afd33e 2003-11-23 devnull /* header check field */
25 b6afd33e 2003-11-23 devnull dst[1] |= 31 - ((dst[0] << 8) | dst[1]) % 31;
26 b6afd33e 2003-11-23 devnull
27 b6afd33e 2003-11-23 devnull adler = adler32(1, src, ssize);
28 b6afd33e 2003-11-23 devnull dst[n + 2] = adler >> 24;
29 b6afd33e 2003-11-23 devnull dst[n + 3] = adler >> 16;
30 b6afd33e 2003-11-23 devnull dst[n + 4] = adler >> 8;
31 b6afd33e 2003-11-23 devnull dst[n + 5] = adler;
32 b6afd33e 2003-11-23 devnull
33 b6afd33e 2003-11-23 devnull return n + 6;
34 b6afd33e 2003-11-23 devnull }