|
|
@@ -26,17 +26,18 @@
|
|
|
#define ARGUMENT_ERROR -10
|
|
|
#define IO_ERROR -11
|
|
|
|
|
|
-typedef gint (*read_write_func) (guchar *buffer, gint length);
|
|
|
+typedef gint (*read_write_func) (guchar *buffer, gint length, void *gchandle);
|
|
|
struct _ZStream {
|
|
|
z_stream *stream;
|
|
|
guchar *buffer;
|
|
|
read_write_func func;
|
|
|
+ void *gchandle;
|
|
|
guchar compress;
|
|
|
guchar eof;
|
|
|
};
|
|
|
typedef struct _ZStream ZStream;
|
|
|
|
|
|
-ZStream *CreateZStream (gint compress, guchar gzip, read_write_func func);
|
|
|
+ZStream *CreateZStream (gint compress, guchar gzip, read_write_func func, void *gchandle);
|
|
|
gint CloseZStream (ZStream *zstream);
|
|
|
gint Flush (ZStream *stream);
|
|
|
gint ReadZStream (ZStream *stream, guchar *buffer, gint length);
|
|
|
@@ -55,7 +56,7 @@ z_free (void *opaque, void *ptr)
|
|
|
}
|
|
|
|
|
|
ZStream *
|
|
|
-CreateZStream (gint compress, guchar gzip, read_write_func func)
|
|
|
+CreateZStream (gint compress, guchar gzip, read_write_func func, void *gchandle)
|
|
|
{
|
|
|
z_stream *z;
|
|
|
gint retval;
|
|
|
@@ -85,6 +86,7 @@ CreateZStream (gint compress, guchar gzip, read_write_func func)
|
|
|
result = g_new0 (ZStream, 1);
|
|
|
result->stream = z;
|
|
|
result->func = func;
|
|
|
+ result->gchandle = gchandle;
|
|
|
result->compress = compress;
|
|
|
result->buffer = g_new (guchar, BUFFER_SIZE);
|
|
|
return result;
|
|
|
@@ -126,7 +128,7 @@ write_to_managed (ZStream *stream)
|
|
|
|
|
|
zs = stream->stream;
|
|
|
if (zs->avail_out != BUFFER_SIZE) {
|
|
|
- n = stream->func (stream->buffer, BUFFER_SIZE - zs->avail_out);
|
|
|
+ n = stream->func (stream->buffer, BUFFER_SIZE - zs->avail_out, stream->gchandle);
|
|
|
zs->next_out = stream->buffer;
|
|
|
zs->avail_out = BUFFER_SIZE;
|
|
|
if (n < 0)
|
|
|
@@ -162,7 +164,7 @@ ReadZStream (ZStream *stream, guchar *buffer, gint length)
|
|
|
zs->avail_out = length;
|
|
|
while (zs->avail_out > 0) {
|
|
|
if (zs->avail_in == 0) {
|
|
|
- n = stream->func (stream->buffer, BUFFER_SIZE);
|
|
|
+ n = stream->func (stream->buffer, BUFFER_SIZE, stream->gchandle);
|
|
|
if (n <= 0) {
|
|
|
stream->eof = TRUE;
|
|
|
break;
|