Annotation of embedaddon/rsync/zlib/compress.c, revision 1.1.1.2

1.1       misho       1: /* compress.c -- compress a memory buffer
1.1.1.2 ! misho       2:  * Copyright (C) 1995-2005 Jean-loup Gailly.
1.1       misho       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: 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: 
1.1.1.2 ! misho      32:     stream.next_in = (z_const Bytef *)source;
1.1       misho      33:     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:     stream.next_out = dest;
                     39:     stream.avail_out = (uInt)*destLen;
                     40:     if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
                     41: 
                     42:     stream.zalloc = (alloc_func)0;
                     43:     stream.zfree = (free_func)0;
                     44:     stream.opaque = (voidpf)0;
                     45: 
                     46:     err = deflateInit(&stream, level);
                     47:     if (err != Z_OK) return err;
                     48: 
                     49:     err = deflate(&stream, Z_FINISH);
                     50:     if (err != Z_STREAM_END) {
                     51:         deflateEnd(&stream);
                     52:         return err == Z_OK ? Z_BUF_ERROR : err;
                     53:     }
                     54:     *destLen = stream.total_out;
                     55: 
                     56:     err = deflateEnd(&stream);
                     57:     return err;
                     58: }
                     59: 
                     60: /* ===========================================================================
                     61:  */
                     62: int ZEXPORT compress (dest, destLen, source, sourceLen)
                     63:     Bytef *dest;
                     64:     uLongf *destLen;
                     65:     const Bytef *source;
                     66:     uLong sourceLen;
                     67: {
                     68:     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: uLong ZEXPORT compressBound (sourceLen)
                     76:     uLong sourceLen;
                     77: {
1.1.1.2 ! misho      78:     return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
        !            79:            (sourceLen >> 25) + 13;
1.1       misho      80: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>