zlib: add inflateReset2()...
authorStefan Metzmacher <metze@samba.org>
Thu, 7 Aug 2008 16:20:11 +0000 (16:20 +0000)
committerStefan Metzmacher <metze@samba.org>
Thu, 7 Aug 2008 17:16:00 +0000 (19:16 +0200)
metze

source/lib/zlib/inflate.c
source/lib/zlib/zconf.h
source/lib/zlib/zlib.h

index 792fdee8e9c72bf3a62ead549577ba5cdd473e61..0c1ff17951a9f76933f5cd7a543381a586a115cf 100644 (file)
@@ -100,8 +100,9 @@ local int updatewindow OF((z_streamp strm, unsigned out));
 local unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf,
                               unsigned len));
 
-int ZEXPORT inflateReset(strm)
+int ZEXPORT inflateReset2(strm, flags)
 z_streamp strm;
+unsigned flags;
 {
     struct inflate_state FAR *state;
 
@@ -115,8 +116,10 @@ z_streamp strm;
     state->havedict = 0;
     state->dmax = 32768U;
     state->head = Z_NULL;
-    state->wsize = 0;
-    state->whave = 0;
+    if (!(flags & Z_RESET_KEEP_WINDOW)) {
+        state->wsize = 0;
+        state->whave = 0;
+    }
     state->write = 0;
     state->hold = 0;
     state->bits = 0;
@@ -125,6 +128,12 @@ z_streamp strm;
     return Z_OK;
 }
 
+int ZEXPORT inflateReset(strm)
+z_streamp strm;
+{
+    return inflateReset2(strm, 0);
+}
+
 int ZEXPORT inflatePrime(strm, bits, value)
 z_streamp strm;
 int bits;
index 03a9431c8be2b44f2b1159308454a0f9c628597c..b65f30ee517a637279f775fa761e8410d299dc55 100644 (file)
@@ -32,6 +32,7 @@
 #  define inflateSyncPoint      z_inflateSyncPoint
 #  define inflateCopy           z_inflateCopy
 #  define inflateReset          z_inflateReset
+#  define inflateReset2         z_inflateReset2
 #  define inflateBack           z_inflateBack
 #  define inflateBackEnd        z_inflateBackEnd
 #  define compress              z_compress
index 022817927ce3d6b1abe5ac57bff70e7de5291ae0..20a16d9588976819a84a6502c32b1d310ae616b0 100644 (file)
@@ -204,6 +204,9 @@ typedef gz_header FAR *gz_headerp;
 
 #define Z_NULL  0  /* for initializing zalloc, zfree, opaque */
 
+#define Z_RESET_KEEP_WINDOW 0x0001
+/* This flag can be passed to inflateReset2 and deflateReset2 */
+
 #define zlib_version zlibVersion()
 /* for compatibility with versions < 1.0.2 */
 
@@ -786,6 +789,8 @@ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest,
    destination.
 */
 
+ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm, unsigned flags));
+
 ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
 /*
      This function is equivalent to inflateEnd followed by inflateInit,
@@ -796,6 +801,16 @@ ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm));
    stream state was inconsistent (such as zalloc or state being NULL).
 */
 
+ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm, unsigned flags));
+/*
+     This function is like inflateReset, but you can pass some flags
+   to have further control over the behavior. If you pass Z_RESET_KEEP_WINDOW
+   the window will be untouched and will be reused in the next runs of inflate()
+
+      inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being NULL).
+*/
+
 ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm,
                                      int bits,
                                      int value));