mirror of
				https://github.com/eledio-devices/thirdparty-miniz.git
				synced 2025-10-31 16:14:16 +01:00 
			
		
		
		
	This commit is contained in:
		
							
								
								
									
										103
									
								
								example1.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								example1.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,103 @@ | ||||
| // example1.c - Demonstrates miniz.c's compress() and uncompress() functions (same as zlib's). | ||||
| // Public domain, May 15 2011, Rich Geldreich, richgel99@gmail.com | ||||
| #include "miniz.c" | ||||
|  | ||||
| typedef unsigned char uint8; | ||||
| typedef unsigned short uint16; | ||||
| typedef unsigned int uint; | ||||
|  | ||||
| // The string to compress. | ||||
| static const char *s_pStr = "Good morning Dr. Chandra. This is Hal. I am ready for my first lesson." \ | ||||
|   "Good morning Dr. Chandra. This is Hal. I am ready for my first lesson." \ | ||||
|   "Good morning Dr. Chandra. This is Hal. I am ready for my first lesson." \ | ||||
|   "Good morning Dr. Chandra. This is Hal. I am ready for my first lesson." \ | ||||
|   "Good morning Dr. Chandra. This is Hal. I am ready for my first lesson." \ | ||||
|   "Good morning Dr. Chandra. This is Hal. I am ready for my first lesson." \ | ||||
|   "Good morning Dr. Chandra. This is Hal. I am ready for my first lesson."; | ||||
|  | ||||
| int main(int argc, char *argv[]) | ||||
| { | ||||
|   uint step = 0; | ||||
|   int cmp_status; | ||||
|   uLong src_len = (uLong)strlen(s_pStr); | ||||
|   uLong cmp_len = compressBound(src_len); | ||||
|   uLong uncomp_len = src_len; | ||||
|   uint8 *pCmp, *pUncomp; | ||||
|   uint total_succeeded = 0; | ||||
|   argc, argv; | ||||
|  | ||||
|   do | ||||
|   { | ||||
|     // Allocate buffers to hold compressed and uncompressed data. | ||||
|     pCmp = (mz_uint8 *)malloc(cmp_len); | ||||
|     pUncomp = (mz_uint8 *)malloc(src_len); | ||||
|     if ((!pCmp) || (!pUncomp)) | ||||
|     { | ||||
|       printf("Out of memory!\n"); | ||||
|       return EXIT_FAILURE; | ||||
|     } | ||||
|  | ||||
|     // Compress the string. | ||||
|     cmp_status = compress(pCmp, &cmp_len, (const unsigned char *)s_pStr, src_len); | ||||
|     if (cmp_status != Z_OK) | ||||
|     { | ||||
|       printf("compress() failed!\n"); | ||||
|       free(pCmp); | ||||
|       free(pUncomp); | ||||
|       return EXIT_FAILURE; | ||||
|     } | ||||
|  | ||||
|     printf("Compressed from %u to %u bytes\n", src_len, cmp_len); | ||||
|  | ||||
|     if (step) | ||||
|     { | ||||
|       // Purposely corrupt the compressed data if fuzzy testing (this is a very crude fuzzy test). | ||||
|       uint n = 1 + (rand() % 3); | ||||
|       while (n--) | ||||
|       { | ||||
|         uint i = rand() % cmp_len; | ||||
|         pCmp[i] ^= (rand() & 0xFF); | ||||
|       } | ||||
|     } | ||||
|      | ||||
|     // Decompress. | ||||
|     cmp_status = uncompress(pUncomp, &uncomp_len, pCmp, cmp_len); | ||||
|     total_succeeded += (cmp_status == Z_OK); | ||||
|      | ||||
|     if (step) | ||||
|     { | ||||
|       printf("Simple fuzzy test: step %u total_succeeded: %u\n", step, total_succeeded); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|       if (cmp_status != Z_OK) | ||||
|       { | ||||
|         printf("uncompress failed!\n"); | ||||
|         free(pCmp); | ||||
|         free(pUncomp); | ||||
|         return EXIT_FAILURE; | ||||
|       } | ||||
|  | ||||
|       printf("Decompressed from %u to %u bytes\n", cmp_len, uncomp_len); | ||||
|  | ||||
|       // Ensure uncompress() returned the expected data. | ||||
|       if ((uncomp_len != src_len) || (memcmp(pUncomp, s_pStr, src_len))) | ||||
|       { | ||||
|         printf("Decompression failed!\n"); | ||||
|         free(pCmp); | ||||
|         free(pUncomp); | ||||
|         return EXIT_FAILURE; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     free(pCmp); | ||||
|     free(pUncomp); | ||||
|  | ||||
|     step++; | ||||
|      | ||||
|     // Keep on fuzzy testing if there's a non-empty command line. | ||||
|   } while (argc >= 2);   | ||||
|  | ||||
|   printf("Success.\n"); | ||||
|   return EXIT_SUCCESS; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user