archive/bz2: allocate buffer statically
Reduce the number of malloc()/free() calls.
This commit is contained in:
parent
2632794578
commit
c157711eaf
@ -37,8 +37,6 @@
|
|||||||
#define BZ2_bzDecompress bzDecompress
|
#define BZ2_bzDecompress bzDecompress
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define BZ_BUFSIZE 5000
|
|
||||||
|
|
||||||
struct bz2_archive_file {
|
struct bz2_archive_file {
|
||||||
struct archive_file base;
|
struct archive_file base;
|
||||||
|
|
||||||
@ -53,7 +51,8 @@ struct bz2_input_stream {
|
|||||||
bool eof;
|
bool eof;
|
||||||
|
|
||||||
bz_stream bzstream;
|
bz_stream bzstream;
|
||||||
char *buffer;
|
|
||||||
|
char buffer[5000];
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct input_plugin bz2_inputplugin;
|
static const struct input_plugin bz2_inputplugin;
|
||||||
@ -75,13 +74,11 @@ bz2_alloc(struct bz2_input_stream *data, GError **error_r)
|
|||||||
data->bzstream.bzfree = NULL;
|
data->bzstream.bzfree = NULL;
|
||||||
data->bzstream.opaque = NULL;
|
data->bzstream.opaque = NULL;
|
||||||
|
|
||||||
data->buffer = g_malloc(BZ_BUFSIZE);
|
|
||||||
data->bzstream.next_in = (void *) data->buffer;
|
data->bzstream.next_in = (void *) data->buffer;
|
||||||
data->bzstream.avail_in = 0;
|
data->bzstream.avail_in = 0;
|
||||||
|
|
||||||
ret = BZ2_bzDecompressInit(&data->bzstream, 0, 0);
|
ret = BZ2_bzDecompressInit(&data->bzstream, 0, 0);
|
||||||
if (ret != BZ_OK) {
|
if (ret != BZ_OK) {
|
||||||
g_free(data->buffer);
|
|
||||||
g_free(data);
|
g_free(data);
|
||||||
|
|
||||||
g_set_error(error_r, bz2_quark(), ret,
|
g_set_error(error_r, bz2_quark(), ret,
|
||||||
@ -96,7 +93,6 @@ static void
|
|||||||
bz2_destroy(struct bz2_input_stream *data)
|
bz2_destroy(struct bz2_input_stream *data)
|
||||||
{
|
{
|
||||||
BZ2_bzDecompressEnd(&data->bzstream);
|
BZ2_bzDecompressEnd(&data->bzstream);
|
||||||
g_free(data->buffer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* archive open && listing routine */
|
/* archive open && listing routine */
|
||||||
@ -210,7 +206,7 @@ bz2_fillbuffer(struct bz2_input_stream *bis, GError **error_r)
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
count = input_stream_read(&bis->archive->istream,
|
count = input_stream_read(&bis->archive->istream,
|
||||||
bis->buffer, BZ_BUFSIZE,
|
bis->buffer, sizeof(bis->buffer),
|
||||||
error_r);
|
error_r);
|
||||||
if (count == 0)
|
if (count == 0)
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
Reference in New Issue
Block a user