| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | #include <stdio.h>
 | 
					
						
							|  |  |  | #include <stdlib.h>
 | 
					
						
							|  |  |  | #include <string.h>
 | 
					
						
							| 
									
										
										
										
											1999-04-24 06:13:45 +08:00
										 |  |  | #include <openssl/objects.h>
 | 
					
						
							|  |  |  | #include <openssl/comp.h>
 | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-20 05:31:43 +08:00
										 |  |  | COMP_CTX *COMP_CTX_new(COMP_METHOD *meth) | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 	COMP_CTX *ret; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-06-02 06:19:21 +08:00
										 |  |  | 	if ((ret=(COMP_CTX *)OPENSSL_malloc(sizeof(COMP_CTX))) == NULL) | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 		{ | 
					
						
							|  |  |  | 		/* ZZZZZZZZZZZZZZZZ */ | 
					
						
							|  |  |  | 		return(NULL); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	memset(ret,0,sizeof(COMP_CTX)); | 
					
						
							|  |  |  | 	ret->meth=meth; | 
					
						
							|  |  |  | 	if ((ret->meth->init != NULL) && !ret->meth->init(ret)) | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2000-06-02 06:19:21 +08:00
										 |  |  | 		OPENSSL_free(ret); | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 		ret=NULL; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	return(ret); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-20 05:31:43 +08:00
										 |  |  | void COMP_CTX_free(COMP_CTX *ctx) | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											1999-01-08 03:15:59 +08:00
										 |  |  | 	if(ctx == NULL) | 
					
						
							|  |  |  | 	    return; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 	if (ctx->meth->finish != NULL) | 
					
						
							|  |  |  | 		ctx->meth->finish(ctx); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-06-02 06:19:21 +08:00
										 |  |  | 	OPENSSL_free(ctx); | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-20 05:31:43 +08:00
										 |  |  | int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen, | 
					
						
							|  |  |  | 	     unsigned char *in, int ilen) | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 	int ret; | 
					
						
							|  |  |  | 	if (ctx->meth->compress == NULL) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		/* ZZZZZZZZZZZZZZZZZ */ | 
					
						
							|  |  |  | 		return(-1); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	ret=ctx->meth->compress(ctx,out,olen,in,ilen); | 
					
						
							|  |  |  | 	if (ret > 0) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		ctx->compress_in+=ilen; | 
					
						
							|  |  |  | 		ctx->compress_out+=ret; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	return(ret); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-20 05:31:43 +08:00
										 |  |  | int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, | 
					
						
							|  |  |  | 	     unsigned char *in, int ilen) | 
					
						
							| 
									
										
										
										
											1998-12-21 19:00:56 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 	int ret; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (ctx->meth->expand == NULL) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		/* ZZZZZZZZZZZZZZZZZ */ | 
					
						
							|  |  |  | 		return(-1); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	ret=ctx->meth->expand(ctx,out,olen,in,ilen); | 
					
						
							|  |  |  | 	if (ret > 0) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 		ctx->expand_in+=ilen; | 
					
						
							|  |  |  | 		ctx->expand_out+=ret; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	return(ret); | 
					
						
							|  |  |  | 	} |