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