diff options
author | Parménides GV <parmegv@sdf.org> | 2014-11-25 13:19:21 +0100 |
---|---|---|
committer | Parménides GV <parmegv@sdf.org> | 2014-11-25 13:19:21 +0100 |
commit | 576b0c26baf9b5b1418650a572604325ca7fb3af (patch) | |
tree | 8b2986d66ed4e6bdf5a3253c81f32cc5a8e53b99 /ics-openvpn-stripped/main/openssl/crypto/comp/c_rle.c | |
parent | bbf877a099112acbf34589b01503c3f5ee135dc0 (diff) | |
parent | 48cd0f2fa3094b5a6b7b07d6413d77bdbc9bbc20 (diff) |
Merge branch 'develop'0.8.0
Diffstat (limited to 'ics-openvpn-stripped/main/openssl/crypto/comp/c_rle.c')
-rw-r--r-- | ics-openvpn-stripped/main/openssl/crypto/comp/c_rle.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/ics-openvpn-stripped/main/openssl/crypto/comp/c_rle.c b/ics-openvpn-stripped/main/openssl/crypto/comp/c_rle.c new file mode 100644 index 00000000..47dfb67f --- /dev/null +++ b/ics-openvpn-stripped/main/openssl/crypto/comp/c_rle.c @@ -0,0 +1,61 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <openssl/objects.h> +#include <openssl/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, + NULL, + }; + +COMP_METHOD *COMP_rle(void) + { + return(&rle_method); + } + +static int rle_compress_block(COMP_CTX *ctx, unsigned char *out, + unsigned int olen, unsigned char *in, unsigned int ilen) + { + /* int i; */ + + if (ilen == 0 || olen < (ilen-1)) + { + /* ZZZZZZZZZZZZZZZZZZZZZZ */ + return(-1); + } + + *(out++)=0; + memcpy(out,in,ilen); + return(ilen+1); + } + +static int rle_expand_block(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); + } |