Преглед на файлове

* zlib-helper.c: support reverse callbacks within MonoTouch.

svn path=/trunk/mono/; revision=141900
Jonathan Pryor преди 16 години
родител
ревизия
d3c8efd063
променени са 2 файла, в които са добавени 11 реда и са изтрити 5 реда
  1. 4 0
      support/ChangeLog
  2. 7 5
      support/zlib-helper.c

+ 4 - 0
support/ChangeLog

@@ -1,3 +1,7 @@
+2009-09-14  Jonathan Pryor  <[email protected]>
+
+	* zlib-helper.c: support reverse callbacks within MonoTouch.
+
 2009-09-09 Gonzalo Paniagua Javier <[email protected]>
 
 	* zconf.h:

+ 7 - 5
support/zlib-helper.c

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