diff --git a/sk1/compressor.c b/sk1/compressor.c index 38c890f..f4ac350 100644 --- a/sk1/compressor.c +++ b/sk1/compressor.c @@ -58,9 +58,17 @@ int compress_1(const char* input_file_name, const char* output_file_name) { free(data); 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); - if (!decompressed) return NULL; + if (!decompressed) { + free(data); + return -1; + } + size_t write_idx = 0; for (size_t i = 0; i < size;) { 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); if (!new_buffer) { free(decompressed); - return NULL; + free(data); + return -1; } decompressed = new_buffer; } decompressed[write_idx++] = byte; } } - *out_size = write_idx; - return decompressed; -} -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; // Змінили місцями файли - - 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); // Змінили місцями файли + int result = write_file(output_file_name, decompressed, write_idx); free(data); free(decompressed); - return result == 0 ? (int)out_size : -1; + return result == 0 ? (int)write_idx : -1; } // LZ78