This commit is contained in:
Džubara 2025-01-19 20:53:25 +01:00
parent 6796bfa7f1
commit ed11fb58e2

View File

@ -194,17 +194,54 @@ int compress_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;
unsigned char* data = read_file(input_file_name, &size);
if (!data) return -1;
FILE* input_file = fopen(input_file_name, "rb");
if (!input_file) {
perror("Error opening input file");
return -1;
}
FILE* output_file = fopen(output_file_name, "wb");
if (!output_file) {
perror("Error opening output file");
fclose(input_file);
return -1;
}
// Reconstruct Huffman tree (you should deserialize it from the file)
// Placeholder: This assumes you rebuild the same tree during decompression
HuffmanNode* root = /* Deserialize tree here */;
if (!root) {
fclose(input_file);
fclose(output_file);
return -1;
}
// Decompress data
unsigned char bit_buffer[1];
int bit_pos = 0;
HuffmanNode* current = root;
while (1) {
int bit = read_bit(input_file, bit_buffer, &bit_pos);
if (bit == -1) break;
current = (bit == 0) ? current->left : current->right;
if (!current->left && !current->right) {
fputc(current->symbol, output_file);
current = root;
}
}
fclose(input_file);
fclose(output_file);
free_huffman_tree(root);
printf("Decompressing using Huffman coding...\n");
int result = write_file(output_file_name, data, size);
free(data);
return result;
return 0;
}
int compress_2(const char* input_file_name, const char* output_file_name) {
size_t size;
unsigned char* data = read_file(input_file_name, &size);