xref: /nrf52832-nimble/rt-thread/components/dfs/filesystems/jffs2/cyg/compress/src/compress.c (revision 104654410c56c573564690304ae786df310c91fc)
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