Line data Source code
1 : /* $OpenBSD: compress.c,v 1.1 2011/07/07 02:57:24 deraadt Exp $ */
2 : /* compress.c -- compress a memory buffer
3 : * Copyright (C) 1995-2003 Jean-loup Gailly.
4 : * For conditions of distribution and use, see copyright notice in zlib.h
5 : */
6 :
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 0 : 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 0 : z_stream stream;
30 : int err;
31 :
32 0 : stream.next_in = (Bytef*)source;
33 0 : 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 0 : stream.next_out = dest;
39 0 : stream.avail_out = (uInt)*destLen;
40 0 : if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
41 :
42 0 : stream.zalloc = (alloc_func)0;
43 0 : stream.zfree = (free_func)0;
44 0 : stream.opaque = (voidpf)0;
45 :
46 0 : err = deflateInit(&stream, level);
47 0 : if (err != Z_OK) return err;
48 :
49 0 : err = deflate(&stream, Z_FINISH);
50 0 : if (err != Z_STREAM_END) {
51 0 : deflateEnd(&stream);
52 0 : return err == Z_OK ? Z_BUF_ERROR : err;
53 : }
54 0 : *destLen = stream.total_out;
55 :
56 0 : err = deflateEnd(&stream);
57 0 : return err;
58 0 : }
59 :
60 : /* ===========================================================================
61 : */
62 0 : int ZEXPORT compress (dest, destLen, source, sourceLen)
63 : Bytef *dest;
64 : uLongf *destLen;
65 : const Bytef *source;
66 : uLong sourceLen;
67 : {
68 0 : 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 0 : uLong ZEXPORT compressBound (sourceLen)
76 : uLong sourceLen;
77 : {
78 0 : return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + 11;
79 : }
|