Fix iron_inflate and iron_deflate
This commit is contained in:
+9
-7
@@ -1596,13 +1596,16 @@ void iron_delete_file(char *path) {
|
|||||||
|
|
||||||
#ifdef WITH_COMPRESS
|
#ifdef WITH_COMPRESS
|
||||||
buffer_t *iron_inflate(buffer_t *bytes, bool raw) {
|
buffer_t *iron_inflate(buffer_t *bytes, bool raw) {
|
||||||
unsigned char *inflated;
|
unsigned char *inflated = NULL;
|
||||||
int inflated_len = bytes->length * 2;
|
int inflated_len = bytes->length * 2;
|
||||||
int out_len = -1;
|
int out_len;
|
||||||
while (out_len == -1) {
|
while(1) {
|
||||||
inflated_len *= 2;
|
|
||||||
inflated = (unsigned char *)realloc(inflated, inflated_len);
|
inflated = (unsigned char *)realloc(inflated, inflated_len);
|
||||||
out_len = sinflate(inflated, inflated_len, bytes->buffer, bytes->length);
|
out_len = raw ? sinflate(inflated, inflated_len, bytes->buffer, bytes->length) : zsinflate(inflated, inflated_len, bytes->buffer, bytes->length);
|
||||||
|
if (out_len >= 0 && out_len < inflated_len) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
inflated_len *= 2;
|
||||||
}
|
}
|
||||||
buffer_t *output = buffer_create(0);
|
buffer_t *output = buffer_create(0);
|
||||||
output->buffer = inflated;
|
output->buffer = inflated;
|
||||||
@@ -1614,8 +1617,7 @@ buffer_t *iron_deflate(buffer_t *bytes, bool raw) {
|
|||||||
struct sdefl sdefl;
|
struct sdefl sdefl;
|
||||||
memset(&sdefl, 0, sizeof(sdefl));
|
memset(&sdefl, 0, sizeof(sdefl));
|
||||||
void *deflated = malloc(sdefl_bound(bytes->length));
|
void *deflated = malloc(sdefl_bound(bytes->length));
|
||||||
// raw == sdeflate
|
int out_len = raw ? sdeflate(&sdefl, deflated, bytes->buffer, bytes->length, SDEFL_LVL_MIN) : zsdeflate(&sdefl, deflated, bytes->buffer, bytes->length, SDEFL_LVL_MIN);
|
||||||
int out_len = zsdeflate(&sdefl, deflated, bytes->buffer, bytes->length, SDEFL_LVL_MIN);
|
|
||||||
buffer_t *output = buffer_create(0);
|
buffer_t *output = buffer_create(0);
|
||||||
output->buffer = deflated;
|
output->buffer = deflated;
|
||||||
output->length = out_len;
|
output->length = out_len;
|
||||||
|
|||||||
Reference in New Issue
Block a user