summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPatrick McDermott <patrick.mcdermott@libiquity.com>2023-04-30 02:41:30 (EDT)
committer Patrick McDermott <patrick.mcdermott@libiquity.com>2023-04-30 02:41:30 (EDT)
commit836a34596e3a288c495f1d85f6994f003f4ba2a2 (patch)
treea5ad4c525bc5974d5e783a4ce11cd605c25fe73e /src
parentb699f4cd57a58091f353f529f4645533821f56d9 (diff)
gzip: Get write buffer after init
Diffstat (limited to 'src')
-rw-r--r--src/gzip.c32
-rw-r--r--src/gzip.h7
2 files changed, 24 insertions, 15 deletions
diff --git a/src/gzip.c b/src/gzip.c
index 2717f54..9e8edfa 100644
--- a/src/gzip.c
+++ b/src/gzip.c
@@ -41,7 +41,7 @@ struct opkg_opk_gzip {
};
static struct opkg_opk_gzip *
-_opkg_opk_gzip_init(enum _opkg_opk_gzip_dir dir, char *buffer, size_t size,
+_opkg_opk_gzip_init(enum _opkg_opk_gzip_dir dir,
opkg_opk_gzip_read_func *read_func,
opkg_opk_gzip_write_func *write_func, void *user_data)
{
@@ -53,12 +53,10 @@ _opkg_opk_gzip_init(enum _opkg_opk_gzip_dir dir, char *buffer, size_t size,
return NULL;
}
- gzip->dir = dir;
- gzip->buffer = buffer;
- gzip->buffer_size = size;
- gzip->read_func = read_func;
- gzip->write_func = write_func;
- gzip->user_data = user_data;
+ gzip->dir = dir;
+ gzip->read_func = read_func;
+ gzip->write_func = write_func;
+ gzip->user_data = user_data;
gzip->stream.zalloc = Z_NULL;
gzip->stream.zfree = Z_NULL;
@@ -73,8 +71,8 @@ _opkg_opk_gzip_init(enum _opkg_opk_gzip_dir dir, char *buffer, size_t size,
return NULL;
}
} else {
- gzip->stream.next_out = buffer;
- gzip->stream.avail_out = size;
+ gzip->stream.next_out = Z_NULL;
+ gzip->stream.avail_out = 0;
if (deflateInit2(&gzip->stream, 9, Z_DEFLATED,
OPKG_OPK_GZIP_WINDOW_BITS_, 9,
Z_DEFAULT_STRATEGY) != Z_OK) {
@@ -101,19 +99,27 @@ _opkg_opk_gzip_init(enum _opkg_opk_gzip_dir dir, char *buffer, size_t size,
struct opkg_opk_gzip *
opkg_opk_gzip_init_read(opkg_opk_gzip_read_func *read, void *user_data)
{
- return _opkg_opk_gzip_init(_OPKG_OPK_GZIP_DIR_READ, NULL, 0,
+ return _opkg_opk_gzip_init(_OPKG_OPK_GZIP_DIR_READ,
read, NULL, user_data);
}
struct opkg_opk_gzip *
-opkg_opk_gzip_init_write(char *buffer, size_t size,
- opkg_opk_gzip_write_func *write, void *user_data)
+opkg_opk_gzip_init_write(opkg_opk_gzip_write_func *write, void *user_data)
{
- return _opkg_opk_gzip_init(_OPKG_OPK_GZIP_DIR_WRITE, buffer, size,
+ return _opkg_opk_gzip_init(_OPKG_OPK_GZIP_DIR_WRITE,
NULL, write, user_data);
}
int
+opkg_opk_gzip_set_write_buffer(struct opkg_opk_gzip *gzip, char *buffer,
+ size_t size)
+{
+ gzip->buffer = buffer;
+ gzip->buffer_size = size;
+ return OPKG_OPK_OK;
+}
+
+int
opkg_opk_gzip_read(struct opkg_opk_gzip *gzip, void *record)
{
int end;
diff --git a/src/gzip.h b/src/gzip.h
index 1fd5d5e..437b855 100644
--- a/src/gzip.h
+++ b/src/gzip.h
@@ -45,8 +45,11 @@ struct opkg_opk_gzip *
opkg_opk_gzip_init_read(opkg_opk_gzip_read_func *read, void *user_data);
struct opkg_opk_gzip *
-opkg_opk_gzip_init_write(char *buffer, size_t size,
- opkg_opk_gzip_write_func *write, void *user_data);
+opkg_opk_gzip_init_write(opkg_opk_gzip_write_func *write, void *user_data);
+
+int
+opkg_opk_gzip_set_write_buffer(struct opkg_opk_gzip *gzip, char *buffer,
+ size_t size);
/*
* Reads and decompresses data to output the next record (512 octets).