intel/tools: deduplicate zlib_inflate function
There are three copies of this function, all of them have the same memory leak in them. Instead of fixing them one by one, just use a common implementation for all three, since they already all have a shared helper lib. Reviewed-by: Tapani Pälli <tapani.palli@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34118>
This commit is contained in:
@@ -261,54 +261,6 @@ struct section {
|
||||
static unsigned num_sections;
|
||||
static struct section sections[MAX_SECTIONS];
|
||||
|
||||
static int zlib_inflate(uint32_t **ptr, int len)
|
||||
{
|
||||
struct z_stream_s zstream;
|
||||
void *out;
|
||||
const uint32_t out_size = 128*4096; /* approximate obj size */
|
||||
|
||||
memset(&zstream, 0, sizeof(zstream));
|
||||
|
||||
zstream.next_in = (unsigned char *)*ptr;
|
||||
zstream.avail_in = 4*len;
|
||||
|
||||
if (inflateInit(&zstream) != Z_OK)
|
||||
return 0;
|
||||
|
||||
out = malloc(out_size);
|
||||
zstream.next_out = out;
|
||||
zstream.avail_out = out_size;
|
||||
|
||||
do {
|
||||
switch (inflate(&zstream, Z_SYNC_FLUSH)) {
|
||||
case Z_STREAM_END:
|
||||
goto end;
|
||||
case Z_OK:
|
||||
break;
|
||||
default:
|
||||
inflateEnd(&zstream);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (zstream.avail_out)
|
||||
break;
|
||||
|
||||
out = realloc(out, 2*zstream.total_out);
|
||||
if (out == NULL) {
|
||||
inflateEnd(&zstream);
|
||||
return 0;
|
||||
}
|
||||
|
||||
zstream.next_out = (unsigned char *)out + zstream.total_out;
|
||||
zstream.avail_out = zstream.total_out;
|
||||
} while (1);
|
||||
end:
|
||||
inflateEnd(&zstream);
|
||||
free(*ptr);
|
||||
*ptr = out;
|
||||
return zstream.total_out / 4;
|
||||
}
|
||||
|
||||
static int ascii85_decode(const char *in, uint32_t **out, bool inflate)
|
||||
{
|
||||
int len = 0, size = 1024;
|
||||
|
||||
@@ -42,54 +42,6 @@
|
||||
|
||||
#define fail(...) fail_if(true, __VA_ARGS__)
|
||||
|
||||
static int zlib_inflate(uint32_t **ptr, int len)
|
||||
{
|
||||
struct z_stream_s zstream;
|
||||
void *out;
|
||||
const uint32_t out_size = 128*4096; /* approximate obj size */
|
||||
|
||||
memset(&zstream, 0, sizeof(zstream));
|
||||
|
||||
zstream.next_in = (unsigned char *)*ptr;
|
||||
zstream.avail_in = 4*len;
|
||||
|
||||
if (inflateInit(&zstream) != Z_OK)
|
||||
return 0;
|
||||
|
||||
out = malloc(out_size);
|
||||
zstream.next_out = out;
|
||||
zstream.avail_out = out_size;
|
||||
|
||||
do {
|
||||
switch (inflate(&zstream, Z_SYNC_FLUSH)) {
|
||||
case Z_STREAM_END:
|
||||
goto end;
|
||||
case Z_OK:
|
||||
break;
|
||||
default:
|
||||
inflateEnd(&zstream);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (zstream.avail_out)
|
||||
break;
|
||||
|
||||
out = realloc(out, 2*zstream.total_out);
|
||||
if (out == NULL) {
|
||||
inflateEnd(&zstream);
|
||||
return 0;
|
||||
}
|
||||
|
||||
zstream.next_out = (unsigned char *)out + zstream.total_out;
|
||||
zstream.avail_out = zstream.total_out;
|
||||
} while (1);
|
||||
end:
|
||||
inflateEnd(&zstream);
|
||||
free(*ptr);
|
||||
*ptr = out;
|
||||
return zstream.total_out / 4;
|
||||
}
|
||||
|
||||
static int ascii85_decode(const char *in, uint32_t **out, bool inflate)
|
||||
{
|
||||
int len = 0, size = 1024;
|
||||
|
||||
@@ -41,54 +41,6 @@
|
||||
|
||||
#define XE_KMD_ERROR_DUMP_IDENTIFIER "**** Xe Device Coredump ****"
|
||||
|
||||
static int zlib_inflate(uint32_t **ptr, int len)
|
||||
{
|
||||
struct z_stream_s zstream;
|
||||
void *out;
|
||||
const uint32_t out_size = 128*4096; /* approximate obj size */
|
||||
|
||||
memset(&zstream, 0, sizeof(zstream));
|
||||
|
||||
zstream.next_in = (unsigned char *)*ptr;
|
||||
zstream.avail_in = 4*len;
|
||||
|
||||
if (inflateInit(&zstream) != Z_OK)
|
||||
return 0;
|
||||
|
||||
out = malloc(out_size);
|
||||
zstream.next_out = out;
|
||||
zstream.avail_out = out_size;
|
||||
|
||||
do {
|
||||
switch (inflate(&zstream, Z_SYNC_FLUSH)) {
|
||||
case Z_STREAM_END:
|
||||
goto end;
|
||||
case Z_OK:
|
||||
break;
|
||||
default:
|
||||
inflateEnd(&zstream);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (zstream.avail_out)
|
||||
break;
|
||||
|
||||
out = realloc(out, 2*zstream.total_out);
|
||||
if (out == NULL) {
|
||||
inflateEnd(&zstream);
|
||||
return 0;
|
||||
}
|
||||
|
||||
zstream.next_out = (unsigned char *)out + zstream.total_out;
|
||||
zstream.avail_out = zstream.total_out;
|
||||
} while (1);
|
||||
end:
|
||||
inflateEnd(&zstream);
|
||||
free(*ptr);
|
||||
*ptr = out;
|
||||
return zstream.total_out / 4;
|
||||
}
|
||||
|
||||
static int ascii85_decode(const char *in, uint32_t **out, bool inflate)
|
||||
{
|
||||
int len = 0, size = 1024;
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
/*
|
||||
* Copyright 2024 Intel Corporation
|
||||
* Copyright 2024-2025 Intel Corporation
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "error_decode_lib.h"
|
||||
|
||||
#include <zlib.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
const char *
|
||||
ascii85_decode_char(const char *in, uint32_t *v)
|
||||
{
|
||||
@@ -23,3 +27,52 @@ ascii85_decode_char(const char *in, uint32_t *v)
|
||||
|
||||
return in;
|
||||
}
|
||||
|
||||
int zlib_inflate(uint32_t **ptr, int len)
|
||||
{
|
||||
struct z_stream_s zstream;
|
||||
void *out;
|
||||
const uint32_t out_size = 128*4096; /* approximate obj size */
|
||||
|
||||
memset(&zstream, 0, sizeof(zstream));
|
||||
|
||||
zstream.next_in = (unsigned char *)*ptr;
|
||||
zstream.avail_in = 4*len;
|
||||
|
||||
if (inflateInit(&zstream) != Z_OK)
|
||||
return 0;
|
||||
|
||||
out = malloc(out_size);
|
||||
zstream.next_out = out;
|
||||
zstream.avail_out = out_size;
|
||||
|
||||
do {
|
||||
switch (inflate(&zstream, Z_SYNC_FLUSH)) {
|
||||
case Z_STREAM_END:
|
||||
goto end;
|
||||
case Z_OK:
|
||||
break;
|
||||
default:
|
||||
free(out);
|
||||
inflateEnd(&zstream);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (zstream.avail_out)
|
||||
break;
|
||||
|
||||
out = realloc(out, 2*zstream.total_out);
|
||||
if (out == NULL) {
|
||||
inflateEnd(&zstream);
|
||||
return 0;
|
||||
}
|
||||
|
||||
zstream.next_out = (unsigned char *)out + zstream.total_out;
|
||||
zstream.avail_out = zstream.total_out;
|
||||
} while (1);
|
||||
end:
|
||||
inflateEnd(&zstream);
|
||||
free(*ptr);
|
||||
*ptr = out;
|
||||
return zstream.total_out / 4;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2024 Intel Corporation
|
||||
* Copyright 2024-2025 Intel Corporation
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
@@ -8,3 +8,5 @@
|
||||
#include <stdint.h>
|
||||
|
||||
const char *ascii85_decode_char(const char *in, uint32_t *v);
|
||||
|
||||
int zlib_inflate(uint32_t **ptr, int len);
|
||||
|
||||
Reference in New Issue
Block a user