12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <openssl/objects.h>
- #include <openssl/comp.h>
- static int rle_compress_block(COMP_CTX *ctx, unsigned char *out,
- unsigned int olen, unsigned char *in,
- unsigned int ilen);
- static int rle_expand_block(COMP_CTX *ctx, unsigned char *out,
- unsigned int olen, unsigned char *in,
- unsigned int ilen);
- static COMP_METHOD rle_method = {
- NID_rle_compression,
- LN_rle_compression,
- NULL,
- NULL,
- rle_compress_block,
- rle_expand_block,
- NULL,
- NULL,
- };
- COMP_METHOD *COMP_rle(void)
- {
- return (&rle_method);
- }
- static int rle_compress_block(COMP_CTX *ctx, unsigned char *out,
- unsigned int olen, unsigned char *in,
- unsigned int ilen)
- {
- if (ilen == 0)
- return 0;
- if (olen <= ilen)
- return -1;
- *(out++) = 0;
- memcpy(out, in, ilen);
- return (ilen + 1);
- }
- static int rle_expand_block(COMP_CTX *ctx, unsigned char *out,
- unsigned int olen, unsigned char *in,
- unsigned int ilen)
- {
- int i;
- if (ilen == 0)
- return 0;
- if (olen < (ilen - 1))
- return -1;
- i = *(in++);
- if (i != 0)
- return -1;
- memcpy(out, in, ilen - 1);
- return (ilen - 1);
- }
|