155714Skris#include <stdio.h> 255714Skris#include <stdlib.h> 355714Skris#include <string.h> 455714Skris#include <openssl/objects.h> 555714Skris#include <openssl/comp.h> 655714Skris 755714Skrisstatic int rle_compress_block(COMP_CTX *ctx, unsigned char *out, 855714Skris unsigned int olen, unsigned char *in, unsigned int ilen); 955714Skrisstatic int rle_expand_block(COMP_CTX *ctx, unsigned char *out, 1055714Skris unsigned int olen, unsigned char *in, unsigned int ilen); 1155714Skris 1255714Skrisstatic COMP_METHOD rle_method={ 1355714Skris NID_rle_compression, 1455714Skris LN_rle_compression, 1555714Skris NULL, 1655714Skris NULL, 1755714Skris rle_compress_block, 1855714Skris rle_expand_block, 1955714Skris NULL, 20109998Smarkm NULL, 2155714Skris }; 2255714Skris 2355714SkrisCOMP_METHOD *COMP_rle(void) 2455714Skris { 2555714Skris return(&rle_method); 2655714Skris } 2755714Skris 2855714Skrisstatic int rle_compress_block(COMP_CTX *ctx, unsigned char *out, 2955714Skris unsigned int olen, unsigned char *in, unsigned int ilen) 3055714Skris { 3155714Skris /* int i; */ 3255714Skris 33238405Sjkim if (ilen == 0 || olen < (ilen-1)) 3455714Skris { 3555714Skris /* ZZZZZZZZZZZZZZZZZZZZZZ */ 3655714Skris return(-1); 3755714Skris } 3855714Skris 3955714Skris *(out++)=0; 4055714Skris memcpy(out,in,ilen); 4155714Skris return(ilen+1); 4255714Skris } 4355714Skris 4455714Skrisstatic int rle_expand_block(COMP_CTX *ctx, unsigned char *out, 4555714Skris unsigned int olen, unsigned char *in, unsigned int ilen) 4655714Skris { 4755714Skris int i; 4855714Skris 49238405Sjkim if (olen < (ilen-1)) 5055714Skris { 5155714Skris /* ZZZZZZZZZZZZZZZZZZZZZZ */ 5255714Skris return(-1); 5355714Skris } 5455714Skris 5555714Skris i= *(in++); 5655714Skris if (i == 0) 5755714Skris { 5855714Skris memcpy(out,in,ilen-1); 5955714Skris } 6055714Skris return(ilen-1); 6155714Skris } 62