| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 | /* * Copyright 1998-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License").  You may not use * this file except in compliance with the License.  You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <openssl/objects.h>#include <openssl/comp.h>#include <openssl/err.h>#include "comp_local.h"COMP_CTX *COMP_CTX_new(COMP_METHOD *meth){    COMP_CTX *ret;    if (meth == NULL)        return NULL;    if ((ret = OPENSSL_zalloc(sizeof(*ret))) == NULL)        return NULL;    ret->meth = meth;    if ((ret->meth->init != NULL) && !ret->meth->init(ret)) {        OPENSSL_free(ret);        ret = NULL;    }    return ret;}const COMP_METHOD *COMP_CTX_get_method(const COMP_CTX *ctx){    return ctx->meth;}int COMP_get_type(const COMP_METHOD *meth){    if (meth == NULL)        return NID_undef;    return meth->type;}const char *COMP_get_name(const COMP_METHOD *meth){    if (meth == NULL)        return NULL;    return meth->name;}void COMP_CTX_free(COMP_CTX *ctx){    if (ctx == NULL)        return;    if (ctx->meth->finish != NULL)        ctx->meth->finish(ctx);    OPENSSL_free(ctx);}int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen,                        unsigned char *in, int ilen){    int ret;    if (ctx->meth->compress == NULL) {        return -1;    }    ret = ctx->meth->compress(ctx, out, olen, in, ilen);    if (ret > 0) {        ctx->compress_in += ilen;        ctx->compress_out += ret;    }    return ret;}int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen,                      unsigned char *in, int ilen){    int ret;    if (ctx->meth->expand == NULL) {        return -1;    }    ret = ctx->meth->expand(ctx, out, olen, in, ilen);    if (ret > 0) {        ctx->expand_in += ilen;        ctx->expand_out += ret;    }    return ret;}int COMP_CTX_get_type(const COMP_CTX* comp){    return comp->meth ? comp->meth->type : NID_undef;}
 |