archive/bz2: allocate buffer statically

Reduce the number of malloc()/free() calls.
This commit is contained in:
Max Kellermann 2009-12-31 11:01:58 +01:00
parent 2632794578
commit c157711eaf

View File

@ -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;