diff options
author | jonyrock <ilms@live.ru> | 2014-05-01 20:15:28 +0400 |
---|---|---|
committer | jonyrock <ilms@live.ru> | 2014-05-01 20:15:28 +0400 |
commit | 209eaf6fa06eba8a05e5222bdab418cd0f20c91c (patch) | |
tree | 94eac56be6ad254a7c09e13d5e14bd843626232c /drivers/builtin_openssl/crypto/comp/c_rle.c | |
parent | 34aea718b11e105d30c938ad34e474b1bd8b5d63 (diff) | |
parent | 6572d5128856b2ec55a2c417c92e584899f4906f (diff) |
Merge remote-tracking branch 'upstream/master' into pair_symbols_tool
Diffstat (limited to 'drivers/builtin_openssl/crypto/comp/c_rle.c')
-rw-r--r-- | drivers/builtin_openssl/crypto/comp/c_rle.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/drivers/builtin_openssl/crypto/comp/c_rle.c b/drivers/builtin_openssl/crypto/comp/c_rle.c new file mode 100644 index 0000000000..47dfb67fbd --- /dev/null +++ b/drivers/builtin_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); + } |