diff options
author | Ralf S. Engelschall <rse@openssl.org> | 1998-12-21 11:00:56 +0000 |
---|---|---|
committer | Ralf S. Engelschall <rse@openssl.org> | 1998-12-21 11:00:56 +0000 |
commit | dfeab0689f69c0b4bd3480ffd37a9cacc2f17d9c (patch) | |
tree | 2f74e0cfd76a9e092548a9bf52e579aef984299b /crypto/comp/c_rle.c | |
parent | 58964a492275ca9a59a0cd9c8155cb2491b4b909 (diff) |
Import of old SSLeay release: SSLeay 0.9.1b (unreleased)SSLeay
Diffstat (limited to 'crypto/comp/c_rle.c')
-rw-r--r-- | crypto/comp/c_rle.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/crypto/comp/c_rle.c b/crypto/comp/c_rle.c new file mode 100644 index 0000000000..b8b9b3e1bc --- /dev/null +++ b/crypto/comp/c_rle.c @@ -0,0 +1,69 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "objects.h" +#include "comp.h" + +static int rle_compress_block(COMP_CTX *ctx, unsigned char *out, + unsigned int olen, unsigned char *in, unsigned int ilen); +static int rle_expand_block(COMP_CTX *ctx, unsigned char *out, + unsigned int olen, unsigned char *in, unsigned int ilen); + +static COMP_METHOD rle_method={ + NID_rle_compression, + LN_rle_compression, + NULL, + NULL, + rle_compress_block, + rle_expand_block, + NULL, + }; + +COMP_METHOD *COMP_rle() + { + return(&rle_method); + } + +static int rle_compress_block(ctx,out,olen,in,ilen) +COMP_CTX *ctx; +unsigned char *out; +unsigned int olen; +unsigned char *in; +unsigned int ilen; + { + /* int i; */ + + if (olen < (ilen+1)) + { + /* ZZZZZZZZZZZZZZZZZZZZZZ */ + return(-1); + } + + *(out++)=0; + memcpy(out,in,ilen); + return(ilen+1); + } + +static int rle_expand_block(ctx,out,olen,in,ilen) +COMP_CTX *ctx; +unsigned char *out; +unsigned int olen; +unsigned char *in; +unsigned int ilen; + { + int i; + + if (olen < (ilen-1)) + { + /* ZZZZZZZZZZZZZZZZZZZZZZ */ + return(-1); + } + + i= *(in++); + if (i == 0) + { + memcpy(out,in,ilen-1); + } + return(ilen-1); + } + |