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