1*10465441SEvalZero /* compress.c -- compress a memory buffer
2*10465441SEvalZero * Copyright (C) 1995-2003 Jean-loup Gailly.
3*10465441SEvalZero * For conditions of distribution and use, see copyright notice in zlib.h
4*10465441SEvalZero */
5*10465441SEvalZero
6*10465441SEvalZero /* @(#) $Id$ */
7*10465441SEvalZero
8*10465441SEvalZero #define ZLIB_INTERNAL
9*10465441SEvalZero #ifdef __ECOS__
10*10465441SEvalZero #include <cyg/compress/zlib.h>
11*10465441SEvalZero #else
12*10465441SEvalZero #include "zlib.h"
13*10465441SEvalZero #endif // __ECOS__
14*10465441SEvalZero
15*10465441SEvalZero /* ===========================================================================
16*10465441SEvalZero Compresses the source buffer into the destination buffer. The level
17*10465441SEvalZero parameter has the same meaning as in deflateInit. sourceLen is the byte
18*10465441SEvalZero length of the source buffer. Upon entry, destLen is the total size of the
19*10465441SEvalZero destination buffer, which must be at least 0.1% larger than sourceLen plus
20*10465441SEvalZero 12 bytes. Upon exit, destLen is the actual size of the compressed buffer.
21*10465441SEvalZero
22*10465441SEvalZero compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
23*10465441SEvalZero memory, Z_BUF_ERROR if there was not enough room in the output buffer,
24*10465441SEvalZero Z_STREAM_ERROR if the level parameter is invalid.
25*10465441SEvalZero */
compress2(dest,destLen,source,sourceLen,level)26*10465441SEvalZero int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
27*10465441SEvalZero Bytef *dest;
28*10465441SEvalZero uLongf *destLen;
29*10465441SEvalZero const Bytef *source;
30*10465441SEvalZero uLong sourceLen;
31*10465441SEvalZero int level;
32*10465441SEvalZero {
33*10465441SEvalZero z_stream stream;
34*10465441SEvalZero int err;
35*10465441SEvalZero
36*10465441SEvalZero stream.next_in = (Bytef*)source;
37*10465441SEvalZero stream.avail_in = (uInt)sourceLen;
38*10465441SEvalZero #ifdef MAXSEG_64K
39*10465441SEvalZero /* Check for source > 64K on 16-bit machine: */
40*10465441SEvalZero if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
41*10465441SEvalZero #endif
42*10465441SEvalZero stream.next_out = dest;
43*10465441SEvalZero stream.avail_out = (uInt)*destLen;
44*10465441SEvalZero if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
45*10465441SEvalZero
46*10465441SEvalZero stream.zalloc = (alloc_func)0;
47*10465441SEvalZero stream.zfree = (free_func)0;
48*10465441SEvalZero stream.opaque = (voidpf)0;
49*10465441SEvalZero
50*10465441SEvalZero err = deflateInit(&stream, level);
51*10465441SEvalZero if (err != Z_OK) return err;
52*10465441SEvalZero
53*10465441SEvalZero err = deflate(&stream, Z_FINISH);
54*10465441SEvalZero if (err != Z_STREAM_END) {
55*10465441SEvalZero deflateEnd(&stream);
56*10465441SEvalZero return err == Z_OK ? Z_BUF_ERROR : err;
57*10465441SEvalZero }
58*10465441SEvalZero *destLen = stream.total_out;
59*10465441SEvalZero
60*10465441SEvalZero err = deflateEnd(&stream);
61*10465441SEvalZero return err;
62*10465441SEvalZero }
63*10465441SEvalZero
64*10465441SEvalZero /* ===========================================================================
65*10465441SEvalZero */
compress(dest,destLen,source,sourceLen)66*10465441SEvalZero int ZEXPORT compress (dest, destLen, source, sourceLen)
67*10465441SEvalZero Bytef *dest;
68*10465441SEvalZero uLongf *destLen;
69*10465441SEvalZero const Bytef *source;
70*10465441SEvalZero uLong sourceLen;
71*10465441SEvalZero {
72*10465441SEvalZero return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION);
73*10465441SEvalZero }
74*10465441SEvalZero
75*10465441SEvalZero /* ===========================================================================
76*10465441SEvalZero If the default memLevel or windowBits for deflateInit() is changed, then
77*10465441SEvalZero this function needs to be updated.
78*10465441SEvalZero */
compressBound(sourceLen)79*10465441SEvalZero uLong ZEXPORT compressBound (sourceLen)
80*10465441SEvalZero uLong sourceLen;
81*10465441SEvalZero {
82*10465441SEvalZero return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + 11;
83*10465441SEvalZero }
84