1d4afb5ceSopenharmony_ci/* compress.c -- compress a memory buffer 2d4afb5ceSopenharmony_ci * Copyright (C) 1995-2005 Jean-loup Gailly. 3d4afb5ceSopenharmony_ci * For conditions of distribution and use, see copyright notice in zlib.h 4d4afb5ceSopenharmony_ci */ 5d4afb5ceSopenharmony_ci 6d4afb5ceSopenharmony_ci/* \param (#) $Id$ */ 7d4afb5ceSopenharmony_ci 8d4afb5ceSopenharmony_ci#define ZLIB_INTERNAL 9d4afb5ceSopenharmony_ci#include "zlib.h" 10d4afb5ceSopenharmony_ci 11d4afb5ceSopenharmony_ci/* =========================================================================== 12d4afb5ceSopenharmony_ci Compresses the source buffer into the destination buffer. The level 13d4afb5ceSopenharmony_ci parameter has the same meaning as in deflateInit. sourceLen is the byte 14d4afb5ceSopenharmony_ci length of the source buffer. Upon entry, destLen is the total size of the 15d4afb5ceSopenharmony_ci destination buffer, which must be at least 0.1% larger than sourceLen plus 16d4afb5ceSopenharmony_ci 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. 17d4afb5ceSopenharmony_ci 18d4afb5ceSopenharmony_ci compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough 19d4afb5ceSopenharmony_ci memory, Z_BUF_ERROR if there was not enough room in the output buffer, 20d4afb5ceSopenharmony_ci Z_STREAM_ERROR if the level parameter is invalid. 21d4afb5ceSopenharmony_ci*/ 22d4afb5ceSopenharmony_ciint ZEXPORT compress2 (dest, destLen, source, sourceLen, level) 23d4afb5ceSopenharmony_ci Bytef *dest; 24d4afb5ceSopenharmony_ci uLongf *destLen; 25d4afb5ceSopenharmony_ci const Bytef *source; 26d4afb5ceSopenharmony_ci uLong sourceLen; 27d4afb5ceSopenharmony_ci int level; 28d4afb5ceSopenharmony_ci{ 29d4afb5ceSopenharmony_ci z_stream stream; 30d4afb5ceSopenharmony_ci int err; 31d4afb5ceSopenharmony_ci 32d4afb5ceSopenharmony_ci stream.next_in = (Bytef*)source; 33d4afb5ceSopenharmony_ci stream.avail_in = (uInt)sourceLen; 34d4afb5ceSopenharmony_ci#ifdef MAXSEG_64K 35d4afb5ceSopenharmony_ci /* Check for source > 64K on 16-bit machine: */ 36d4afb5ceSopenharmony_ci if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; 37d4afb5ceSopenharmony_ci#endif 38d4afb5ceSopenharmony_ci stream.next_out = dest; 39d4afb5ceSopenharmony_ci stream.avail_out = (uInt)*destLen; 40d4afb5ceSopenharmony_ci if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; 41d4afb5ceSopenharmony_ci 42d4afb5ceSopenharmony_ci stream.zalloc = (alloc_func)0; 43d4afb5ceSopenharmony_ci stream.zfree = (free_func)0; 44d4afb5ceSopenharmony_ci stream.opaque = (voidpf)0; 45d4afb5ceSopenharmony_ci 46d4afb5ceSopenharmony_ci err = deflateInit(&stream, level); 47d4afb5ceSopenharmony_ci if (err != Z_OK) return err; 48d4afb5ceSopenharmony_ci 49d4afb5ceSopenharmony_ci err = deflate(&stream, Z_FINISH); 50d4afb5ceSopenharmony_ci if (err != Z_STREAM_END) { 51d4afb5ceSopenharmony_ci deflateEnd(&stream); 52d4afb5ceSopenharmony_ci return err == Z_OK ? Z_BUF_ERROR : err; 53d4afb5ceSopenharmony_ci } 54d4afb5ceSopenharmony_ci *destLen = stream.total_out; 55d4afb5ceSopenharmony_ci 56d4afb5ceSopenharmony_ci err = deflateEnd(&stream); 57d4afb5ceSopenharmony_ci return err; 58d4afb5ceSopenharmony_ci} 59d4afb5ceSopenharmony_ci 60d4afb5ceSopenharmony_ci/* =========================================================================== 61d4afb5ceSopenharmony_ci */ 62d4afb5ceSopenharmony_ciint ZEXPORT compress (dest, destLen, source, sourceLen) 63d4afb5ceSopenharmony_ci Bytef *dest; 64d4afb5ceSopenharmony_ci uLongf *destLen; 65d4afb5ceSopenharmony_ci const Bytef *source; 66d4afb5ceSopenharmony_ci uLong sourceLen; 67d4afb5ceSopenharmony_ci{ 68d4afb5ceSopenharmony_ci return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION); 69d4afb5ceSopenharmony_ci} 70d4afb5ceSopenharmony_ci 71d4afb5ceSopenharmony_ci/* =========================================================================== 72d4afb5ceSopenharmony_ci If the default memLevel or windowBits for deflateInit() is changed, then 73d4afb5ceSopenharmony_ci this function needs to be updated. 74d4afb5ceSopenharmony_ci */ 75d4afb5ceSopenharmony_ciuLong ZEXPORT compressBound (sourceLen) 76d4afb5ceSopenharmony_ci uLong sourceLen; 77d4afb5ceSopenharmony_ci{ 78d4afb5ceSopenharmony_ci return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + 79d4afb5ceSopenharmony_ci (sourceLen >> 25) + 13; 80d4afb5ceSopenharmony_ci} 81