1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdio.h> 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdlib.h> 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <string.h> 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/objects.h> 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/comp.h> 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int rle_compress_block(COMP_CTX *ctx, unsigned char *out, 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned int olen, unsigned char *in, unsigned int ilen); 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int rle_expand_block(COMP_CTX *ctx, unsigned char *out, 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned int olen, unsigned char *in, unsigned int ilen); 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic COMP_METHOD rle_method={ 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NID_rle_compression, 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LN_rle_compression, 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NULL, 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NULL, 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rle_compress_block, 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rle_expand_block, 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NULL, 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NULL, 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project }; 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectCOMP_METHOD *COMP_rle(void) 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return(&rle_method); 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int rle_compress_block(COMP_CTX *ctx, unsigned char *out, 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned int olen, unsigned char *in, unsigned int ilen) 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* int i; */ 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 33392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom if (ilen == 0 || olen < (ilen-1)) 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* ZZZZZZZZZZZZZZZZZZZZZZ */ 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return(-1); 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *(out++)=0; 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project memcpy(out,in,ilen); 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return(ilen+1); 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int rle_expand_block(COMP_CTX *ctx, unsigned char *out, 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unsigned int olen, unsigned char *in, unsigned int ilen) 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int i; 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 49392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom if (olen < (ilen-1)) 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* ZZZZZZZZZZZZZZZZZZZZZZ */ 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return(-1); 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project i= *(in++); 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (i == 0) 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project memcpy(out,in,ilen-1); 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return(ilen-1); 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 62