]> git.proxmox.com Git - efi-boot-shim.git/blob - Cryptlib/OpenSSL/crypto/comp/c_rle.c
New upstream version 15.3
[efi-boot-shim.git] / Cryptlib / OpenSSL / crypto / comp / c_rle.c
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,
9 unsigned int ilen);
10 static int rle_expand_block(COMP_CTX *ctx, unsigned char *out,
11 unsigned int olen, unsigned char *in,
12 unsigned int ilen);
13
14 static COMP_METHOD rle_method = {
15 NID_rle_compression,
16 LN_rle_compression,
17 NULL,
18 NULL,
19 rle_compress_block,
20 rle_expand_block,
21 NULL,
22 NULL,
23 };
24
25 COMP_METHOD *COMP_rle(void)
26 {
27 return (&rle_method);
28 }
29
30 static int rle_compress_block(COMP_CTX *ctx, unsigned char *out,
31 unsigned int olen, unsigned char *in,
32 unsigned int ilen)
33 {
34 /* int i; */
35
36 if (ilen == 0 || olen < (ilen - 1)) {
37 /* ZZZZZZZZZZZZZZZZZZZZZZ */
38 return (-1);
39 }
40
41 *(out++) = 0;
42 memcpy(out, in, ilen);
43 return (ilen + 1);
44 }
45
46 static int rle_expand_block(COMP_CTX *ctx, unsigned char *out,
47 unsigned int olen, unsigned char *in,
48 unsigned int ilen)
49 {
50 int i;
51
52 if (olen < (ilen - 1)) {
53 /* ZZZZZZZZZZZZZZZZZZZZZZ */
54 return (-1);
55 }
56
57 i = *(in++);
58 if (i == 0) {
59 memcpy(out, in, ilen - 1);
60 }
61 return (ilen - 1);
62 }