This commit is contained in:
Bohdan Kapliuk 2025-01-12 17:23:27 +02:00
parent 23e3727abb
commit 1e3a1d91af

View File

@ -58,9 +58,17 @@ int compress_1(const char* input_file_name, const char* output_file_name) {
free(data); free(data);
return 0; return 0;
} }
unsigned char* decompress_1_buffer(const unsigned char* data, size_t size, size_t* out_size) { int decompress_1(const char* input_file_name, const char* output_file_name) {
size_t size;
unsigned char* data;
if (read_file(input_file_name, &data, &size) != 0) return -1;
unsigned char* decompressed = malloc(size * 255); unsigned char* decompressed = malloc(size * 255);
if (!decompressed) return NULL; if (!decompressed) {
free(data);
return -1;
}
size_t write_idx = 0; size_t write_idx = 0;
for (size_t i = 0; i < size;) { for (size_t i = 0; i < size;) {
unsigned char byte = data[i++]; unsigned char byte = data[i++];
@ -74,33 +82,20 @@ unsigned char* decompress_1_buffer(const unsigned char* data, size_t size, size_
unsigned char* new_buffer = realloc(decompressed, new_size); unsigned char* new_buffer = realloc(decompressed, new_size);
if (!new_buffer) { if (!new_buffer) {
free(decompressed); free(decompressed);
return NULL; free(data);
return -1;
} }
decompressed = new_buffer; decompressed = new_buffer;
} }
decompressed[write_idx++] = byte; decompressed[write_idx++] = byte;
} }
} }
*out_size = write_idx;
return decompressed;
}
int decompress_1(const char* input_file_name, const char* output_file_name) { int result = write_file(output_file_name, decompressed, write_idx);
size_t size;
unsigned char* data;
if (read_file(input_file_name, &data, &size) != 0) return -1; // Змінили місцями файли
size_t out_size;
unsigned char* decompressed = decompress_1_buffer(data, size, &out_size);
if (!decompressed) {
free(data);
return -1;
}
int result = write_file(output_file_name, decompressed, out_size); // Змінили місцями файли
free(data); free(data);
free(decompressed); free(decompressed);
return result == 0 ? (int)out_size : -1; return result == 0 ? (int)write_idx : -1;
} }
// LZ78 // LZ78