sk1
This commit is contained in:
parent
23e3727abb
commit
1e3a1d91af
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user