File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / rsync / zlib / compress.c
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Oct 14 07:51:14 2013 UTC (10 years, 8 months ago) by misho
Branches: rsync, MAIN
CVS tags: v3_2_3, v3_1_2p5, RSYNC3_1_0, HEAD
v 3.1.0

    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: compress.c,v 1.1.1.2 2013/10/14 07:51:14 misho Exp $ */
    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: 
   32:     stream.next_in = (z_const Bytef *)source;
   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: {
   78:     return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
   79:            (sourceLen >> 25) + 13;
   80: }

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