1 #include <stdio.h>
   2 #include <stdlib.h>
   3 #include <string.h>
   4 #include <openssl/objects.h>
   5 #include <openssl/comp.h>
   6 
   7 COMP_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 
  26 void 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 
  37 int 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 
  55 int 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         }