OpenSSL  1.0.1c
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros
c_rle.c
Go to the documentation of this file.
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={
15  NULL,
16  NULL,
17  rle_compress_block,
18  rle_expand_block,
19  NULL,
20  NULL,
21  };
22 
24  {
25  return(&rle_method);
26  }
27 
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 
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  }