⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 deflatecompress.c

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 C
字号:
/*__________________________________________________________________________
 Copyright (C) 2002 PGP Corporation
 All rights reserved.
 
 $Id: DeflateCompress.c,v 1.8 2002/08/06 20:10:16 dallen Exp $
__________________________________________________________________________*/
#include <stdio.h>
#include <memory.h>
#if !PGP_UNIX_DARWIN
#include <malloc.h>
#endif
#include "zlib.h"
#include "DeflateWrapper.h"

#define INSIZE		512
#define OUTSIZE		512

static void *sAllocMem(void *dummy, unsigned int nItems, unsigned int nSize);
static void sFreeMem(void *dummy, void *address);


void Deflate_Compress(void *pUserValue)
{
	z_stream	myStream;
	int nIn;
	char szIn[INSIZE];
	char szOut[OUTSIZE];
	unsigned int nOutIndex;
	unsigned int nInIndex;
	int nErr = Z_OK;

	myStream.zalloc = sAllocMem;
	myStream.zfree = sFreeMem;
	myStream.opaque = NULL;

	deflateInit(&myStream, Z_BEST_COMPRESSION);

	myStream.next_in = szIn;
	myStream.next_out = szOut;
	myStream.avail_in = 0;
	myStream.avail_out = OUTSIZE;

	nIn = 0;
	nInIndex = 0;

	while (nErr == Z_OK)
	{
		if (nIn != EOF)
		{
			if (!myStream.avail_in)
			{
				nInIndex = 0;
				while ((nIn != EOF) && (nInIndex < INSIZE))
				{
					nIn = comp_getc_buffer(pUserValue);
					szIn[nInIndex] = nIn;
					nInIndex++;
				}

				myStream.avail_in = nInIndex;
				myStream.next_in = szIn;
			}

			nErr = deflate(&myStream, Z_NO_FLUSH);
		}
		else
			nErr = deflate(&myStream, Z_FINISH);

		if ((nErr == Z_OK) && !myStream.avail_out)
		{
			nOutIndex = 0;
			while (nOutIndex < OUTSIZE)
				comp_putc_buffer(szOut[nOutIndex++], pUserValue);
		
			myStream.next_out = szOut;
			myStream.avail_out = OUTSIZE;
		}
	}

	if (nErr == Z_STREAM_END)
	{
		nOutIndex = 0;
		while (nOutIndex < (OUTSIZE - myStream.avail_out))
			comp_putc_buffer(szOut[nOutIndex++], pUserValue);
	}

	return;
}


static void *sAllocMem(void *dummy, unsigned int nItems, unsigned int nSize)
{
	return calloc(nItems, nSize);
}


static void sFreeMem(void *dummy, void *address)
{
	free(address);
	return;
}


#ifdef WIN32
#ifndef IS_ADMIN
void pgpCopyMemory(void const *src, void *dest, size_t size)
{
	memcpy(dest, src, size);
	return;
}
#endif // IS_ADMIN
#endif /* WIN32 */


/*__Editor_settings____

	Local Variables:
	tab-width: 4
	End:
	vi: ts=4 sw=4
	vim: si
_____________________*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -