skuska
This commit is contained in:
parent
b1da0bb771
commit
1e6fb33624
@ -120,18 +120,33 @@ int compress_1(const char* input_file_name, const char* output_file_name) {
|
|||||||
unsigned char* data = read_file(input_file_name, &size);
|
unsigned char* data = read_file(input_file_name, &size);
|
||||||
if (!data) return -1;
|
if (!data) return -1;
|
||||||
|
|
||||||
|
|
||||||
HuffmanNode* root = build_huffman_tree(data, size);
|
HuffmanNode* root = build_huffman_tree(data, size);
|
||||||
if (!root) {
|
if (!root) {
|
||||||
free(data);
|
free(data);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char* codes[256] = {0};
|
char* codes[256] = {0};
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
generate_huffman_codes(root, codes, buffer, 0);
|
generate_huffman_codes(root, codes, buffer, 0);
|
||||||
|
|
||||||
|
|
||||||
|
FILE* output_file = fopen(output_file_name, "wb");
|
||||||
|
if (!output_file) {
|
||||||
|
perror("Error opening output file");
|
||||||
|
free(data);
|
||||||
|
free_huffman_tree(root);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fwrite(data, 1, size, output_file);
|
||||||
|
fclose(output_file);
|
||||||
|
|
||||||
printf("Compressing using Huffman coding...\n");
|
printf("Compressing using Huffman coding...\n");
|
||||||
|
|
||||||
|
// Clean up
|
||||||
for (int i = 0; i < 256; i++) {
|
for (int i = 0; i < 256; i++) {
|
||||||
if (codes[i]) free(codes[i]);
|
if (codes[i]) free(codes[i]);
|
||||||
}
|
}
|
||||||
@ -141,6 +156,7 @@ int compress_1(const char* input_file_name, const char* output_file_name) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int decompress_1(const char* input_file_name, const char* output_file_name) {
|
int decompress_1(const char* input_file_name, const char* output_file_name) {
|
||||||
size_t size;
|
size_t size;
|
||||||
unsigned char* data = read_file(input_file_name, &size);
|
unsigned char* data = read_file(input_file_name, &size);
|
||||||
|
Loading…
Reference in New Issue
Block a user