169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal/* compress.c -- compress a memory buffer 269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * Copyright (C) 1995-2005 Jean-loup Gailly. 369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal * For conditions of distribution and use, see copyright notice in zlib.h 469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal */ 569e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 669e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal/* @(#) $Id$ */ 769e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 869e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal#define ZLIB_INTERNAL 969e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal#include "zlib.h" 1069e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 1169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal/* =========================================================================== 1269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal Compresses the source buffer into the destination buffer. The level 1369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal parameter has the same meaning as in deflateInit. sourceLen is the byte 1469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal length of the source buffer. Upon entry, destLen is the total size of the 1569e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal destination buffer, which must be at least 0.1% larger than sourceLen plus 1669e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. 1769e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 1869e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough 1969e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal memory, Z_BUF_ERROR if there was not enough room in the output buffer, 2069e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal Z_STREAM_ERROR if the level parameter is invalid. 2169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal*/ 2269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigalint ZEXPORT compress2 (dest, destLen, source, sourceLen, level) 2369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal Bytef *dest; 2469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal uLongf *destLen; 2569e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal const Bytef *source; 2669e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal uLong sourceLen; 2769e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal int level; 2869e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal{ 2969e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal z_stream stream; 3069e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal int err; 3169e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 3269e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal stream.next_in = (z_const Bytef *)source; 3369e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal stream.avail_in = (uInt)sourceLen; 3469e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal#ifdef MAXSEG_64K 3569e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal /* Check for source > 64K on 16-bit machine: */ 3669e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; 3769e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal#endif 3869e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal stream.next_out = dest; 3969e17611504376e4d4603925f8528dfc890fd2c6Luis Sigal 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 */ 62int 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 */ 75uLong ZEXPORT compressBound (sourceLen) 76 uLong sourceLen; 77{ 78 return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + 79 (sourceLen >> 25) + 13; 80} 81