You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			62 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
		
		
			
		
	
	
			62 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
| 
											10 years ago
										 | #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) | ||
|  | 	{ | ||
|  | 	/* int i; */ | ||
|  | 
 | ||
|  | 	if (ilen == 0 || olen < (ilen-1)) | ||
|  | 		{ | ||
|  | 		/* ZZZZZZZZZZZZZZZZZZZZZZ */ | ||
|  | 		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 (olen < (ilen-1)) | ||
|  | 		{ | ||
|  | 		/* ZZZZZZZZZZZZZZZZZZZZZZ */ | ||
|  | 		return(-1); | ||
|  | 		} | ||
|  | 
 | ||
|  | 	i= *(in++); | ||
|  | 	if (i == 0) | ||
|  | 		{ | ||
|  | 		memcpy(out,in,ilen-1); | ||
|  | 		} | ||
|  | 	return(ilen-1); | ||
|  | 	} |