199767f8919635c4928607450d9e0abb932109ceToomas Soome/* compress.c -- compress a memory buffer
199767f8919635c4928607450d9e0abb932109ceToomas Soome * Copyright (C) 1995-2005 Jean-loup Gailly.
199767f8919635c4928607450d9e0abb932109ceToomas Soome * For conditions of distribution and use, see copyright notice in zlib.h
199767f8919635c4928607450d9e0abb932109ceToomas Soome */
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome/* @(#) $Id$ */
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome#define ZLIB_INTERNAL
199767f8919635c4928607450d9e0abb932109ceToomas Soome#include "zlib.h"
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome/* ===========================================================================
199767f8919635c4928607450d9e0abb932109ceToomas Soome Compresses the source buffer into the destination buffer. The level
199767f8919635c4928607450d9e0abb932109ceToomas Soome parameter has the same meaning as in deflateInit. sourceLen is the byte
199767f8919635c4928607450d9e0abb932109ceToomas Soome length of the source buffer. Upon entry, destLen is the total size of the
199767f8919635c4928607450d9e0abb932109ceToomas Soome destination buffer, which must be at least 0.1% larger than sourceLen plus
199767f8919635c4928607450d9e0abb932109ceToomas Soome 12 bytes. Upon exit, destLen is the actual size of the compressed buffer.
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
199767f8919635c4928607450d9e0abb932109ceToomas Soome memory, Z_BUF_ERROR if there was not enough room in the output buffer,
199767f8919635c4928607450d9e0abb932109ceToomas Soome Z_STREAM_ERROR if the level parameter is invalid.
199767f8919635c4928607450d9e0abb932109ceToomas Soome*/
199767f8919635c4928607450d9e0abb932109ceToomas Soomeint ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
199767f8919635c4928607450d9e0abb932109ceToomas Soome Bytef *dest;
199767f8919635c4928607450d9e0abb932109ceToomas Soome uLongf *destLen;
199767f8919635c4928607450d9e0abb932109ceToomas Soome const Bytef *source;
199767f8919635c4928607450d9e0abb932109ceToomas Soome uLong sourceLen;
199767f8919635c4928607450d9e0abb932109ceToomas Soome int level;
199767f8919635c4928607450d9e0abb932109ceToomas Soome{
199767f8919635c4928607450d9e0abb932109ceToomas Soome z_stream stream;
199767f8919635c4928607450d9e0abb932109ceToomas Soome int err;
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome stream.next_in = (z_const Bytef *)source;
199767f8919635c4928607450d9e0abb932109ceToomas Soome stream.avail_in = (uInt)sourceLen;
199767f8919635c4928607450d9e0abb932109ceToomas Soome#ifdef MAXSEG_64K
199767f8919635c4928607450d9e0abb932109ceToomas Soome /* Check for source > 64K on 16-bit machine: */
199767f8919635c4928607450d9e0abb932109ceToomas Soome if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
199767f8919635c4928607450d9e0abb932109ceToomas Soome#endif
199767f8919635c4928607450d9e0abb932109ceToomas Soome stream.next_out = dest;
199767f8919635c4928607450d9e0abb932109ceToomas Soome stream.avail_out = (uInt)*destLen;
199767f8919635c4928607450d9e0abb932109ceToomas Soome if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome stream.zalloc = (alloc_func)0;
199767f8919635c4928607450d9e0abb932109ceToomas Soome stream.zfree = (free_func)0;
199767f8919635c4928607450d9e0abb932109ceToomas Soome stream.opaque = (voidpf)0;
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome err = deflateInit(&stream, level);
199767f8919635c4928607450d9e0abb932109ceToomas Soome if (err != Z_OK) return err;
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome err = deflate(&stream, Z_FINISH);
199767f8919635c4928607450d9e0abb932109ceToomas Soome if (err != Z_STREAM_END) {
199767f8919635c4928607450d9e0abb932109ceToomas Soome deflateEnd(&stream);
199767f8919635c4928607450d9e0abb932109ceToomas Soome return err == Z_OK ? Z_BUF_ERROR : err;
199767f8919635c4928607450d9e0abb932109ceToomas Soome }
199767f8919635c4928607450d9e0abb932109ceToomas Soome *destLen = stream.total_out;
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome err = deflateEnd(&stream);
199767f8919635c4928607450d9e0abb932109ceToomas Soome return err;
199767f8919635c4928607450d9e0abb932109ceToomas Soome}
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome/* ===========================================================================
199767f8919635c4928607450d9e0abb932109ceToomas Soome */
199767f8919635c4928607450d9e0abb932109ceToomas Soomeint ZEXPORT compress (dest, destLen, source, sourceLen)
199767f8919635c4928607450d9e0abb932109ceToomas Soome Bytef *dest;
199767f8919635c4928607450d9e0abb932109ceToomas Soome uLongf *destLen;
199767f8919635c4928607450d9e0abb932109ceToomas Soome const Bytef *source;
199767f8919635c4928607450d9e0abb932109ceToomas Soome uLong sourceLen;
199767f8919635c4928607450d9e0abb932109ceToomas Soome{
199767f8919635c4928607450d9e0abb932109ceToomas Soome return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION);
199767f8919635c4928607450d9e0abb932109ceToomas Soome}
199767f8919635c4928607450d9e0abb932109ceToomas Soome
199767f8919635c4928607450d9e0abb932109ceToomas Soome/* ===========================================================================
199767f8919635c4928607450d9e0abb932109ceToomas Soome If the default memLevel or windowBits for deflateInit() is changed, then
199767f8919635c4928607450d9e0abb932109ceToomas Soome this function needs to be updated.
199767f8919635c4928607450d9e0abb932109ceToomas Soome */
199767f8919635c4928607450d9e0abb932109ceToomas SoomeuLong ZEXPORT compressBound (sourceLen)
199767f8919635c4928607450d9e0abb932109ceToomas Soome uLong sourceLen;
199767f8919635c4928607450d9e0abb932109ceToomas Soome{
199767f8919635c4928607450d9e0abb932109ceToomas Soome return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
199767f8919635c4928607450d9e0abb932109ceToomas Soome (sourceLen >> 25) + 13;
199767f8919635c4928607450d9e0abb932109ceToomas Soome}