• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <openssl/objects.h>
5 #include <openssl/comp.h>
6 
7 static int rle_compress_block(COMP_CTX *ctx, unsigned char *out,
8 	unsigned int olen, unsigned char *in, unsigned int ilen);
9 static int rle_expand_block(COMP_CTX *ctx, unsigned char *out,
10 	unsigned int olen, unsigned char *in, unsigned int ilen);
11 
12 static COMP_METHOD rle_method={
13 	NID_rle_compression,
14 	LN_rle_compression,
15 	NULL,
16 	NULL,
17 	rle_compress_block,
18 	rle_expand_block,
19 	NULL,
20 	NULL,
21 	};
22 
COMP_rle(void)23 COMP_METHOD *COMP_rle(void)
24 	{
25 	return(&rle_method);
26 	}
27 
rle_compress_block(COMP_CTX * ctx,unsigned char * out,unsigned int olen,unsigned char * in,unsigned int ilen)28 static int rle_compress_block(COMP_CTX *ctx, unsigned char *out,
29 	     unsigned int olen, unsigned char *in, unsigned int ilen)
30 	{
31 	/* int i; */
32 
33 	if (ilen == 0 || olen < (ilen-1))
34 		{
35 		/* ZZZZZZZZZZZZZZZZZZZZZZ */
36 		return(-1);
37 		}
38 
39 	*(out++)=0;
40 	memcpy(out,in,ilen);
41 	return(ilen+1);
42 	}
43 
rle_expand_block(COMP_CTX * ctx,unsigned char * out,unsigned int olen,unsigned char * in,unsigned int ilen)44 static int rle_expand_block(COMP_CTX *ctx, unsigned char *out,
45 	     unsigned int olen, unsigned char *in, unsigned int ilen)
46 	{
47 	int i;
48 
49 	if (olen < (ilen-1))
50 		{
51 		/* ZZZZZZZZZZZZZZZZZZZZZZ */
52 		return(-1);
53 		}
54 
55 	i= *(in++);
56 	if (i == 0)
57 		{
58 		memcpy(out,in,ilen-1);
59 		}
60 	return(ilen-1);
61 	}
62