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