1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4#include <openssl/objects.h>
5#include <openssl/comp.h>
6
7COMP_CTX *COMP_CTX_new(COMP_METHOD *meth)
8	{
9	COMP_CTX *ret;
10
11	if ((ret=(COMP_CTX *)OPENSSL_malloc(sizeof(COMP_CTX))) == NULL)
12		{
13		/* ZZZZZZZZZZZZZZZZ */
14		return(NULL);
15		}
16	memset(ret,0,sizeof(COMP_CTX));
17	ret->meth=meth;
18	if ((ret->meth->init != NULL) && !ret->meth->init(ret))
19		{
20		OPENSSL_free(ret);
21		ret=NULL;
22		}
23	return(ret);
24	}
25
26void COMP_CTX_free(COMP_CTX *ctx)
27	{
28	if(ctx == NULL)
29	    return;
30
31	if (ctx->meth->finish != NULL)
32		ctx->meth->finish(ctx);
33
34	OPENSSL_free(ctx);
35	}
36
37int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen,
38	     unsigned char *in, int ilen)
39	{
40	int ret;
41	if (ctx->meth->compress == NULL)
42		{
43		/* ZZZZZZZZZZZZZZZZZ */
44		return(-1);
45		}
46	ret=ctx->meth->compress(ctx,out,olen,in,ilen);
47	if (ret > 0)
48		{
49		ctx->compress_in+=ilen;
50		ctx->compress_out+=ret;
51		}
52	return(ret);
53	}
54
55int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen,
56	     unsigned char *in, int ilen)
57	{
58	int ret;
59
60	if (ctx->meth->expand == NULL)
61		{
62		/* ZZZZZZZZZZZZZZZZZ */
63		return(-1);
64		}
65	ret=ctx->meth->expand(ctx,out,olen,in,ilen);
66	if (ret > 0)
67		{
68		ctx->expand_in+=ilen;
69		ctx->expand_out+=ret;
70		}
71	return(ret);
72	}
73