1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdio.h>
2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdlib.h>
3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <string.h>
4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/objects.h>
5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/comp.h>
6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectCOMP_CTX *COMP_CTX_new(COMP_METHOD *meth)
8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	COMP_CTX *ret;
10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if ((ret=(COMP_CTX *)OPENSSL_malloc(sizeof(COMP_CTX))) == NULL)
12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		/* ZZZZZZZZZZZZZZZZ */
14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return(NULL);
15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	memset(ret,0,sizeof(COMP_CTX));
17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ret->meth=meth;
18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if ((ret->meth->init != NULL) && !ret->meth->init(ret))
19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		OPENSSL_free(ret);
21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		ret=NULL;
22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return(ret);
24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid COMP_CTX_free(COMP_CTX *ctx)
27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if(ctx == NULL)
29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	    return;
30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (ctx->meth->finish != NULL)
32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		ctx->meth->finish(ctx);
33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	OPENSSL_free(ctx);
35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen,
38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	     unsigned char *in, int ilen)
39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	int ret;
41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (ctx->meth->compress == NULL)
42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		/* ZZZZZZZZZZZZZZZZZ */
44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return(-1);
45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ret=ctx->meth->compress(ctx,out,olen,in,ilen);
47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (ret > 0)
48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		ctx->compress_in+=ilen;
50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		ctx->compress_out+=ret;
51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return(ret);
53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen,
56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	     unsigned char *in, int ilen)
57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	int ret;
59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (ctx->meth->expand == NULL)
61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		/* ZZZZZZZZZZZZZZZZZ */
63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		return(-1);
64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	ret=ctx->meth->expand(ctx,out,olen,in,ilen);
66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if (ret > 0)
67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		ctx->expand_in+=ilen;
69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		ctx->expand_out+=ret;
70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	return(ret);
72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
73