Add inflateGetDictionary() function.
diff --git a/as400/bndsrc b/as400/bndsrc
index 52cc661..a6de4d5 100644
--- a/as400/bndsrc
+++ b/as400/bndsrc
@@ -67,6 +67,7 @@
   EXPORT SYMBOL("inflate")
   EXPORT SYMBOL("inflateEnd")
   EXPORT SYMBOL("inflateSetDictionary")
+  EXPORT SYMBOL("inflateGetDictionary")
   EXPORT SYMBOL("inflateSync")
   EXPORT SYMBOL("inflateReset")
   EXPORT SYMBOL("inflateInit_")
diff --git a/as400/zlib.inc b/as400/zlib.inc
index 66d867a..9c94be8 100644
--- a/as400/zlib.inc
+++ b/as400/zlib.inc
@@ -359,6 +359,12 @@
      D  dictionary                65535    const options(*varsize)              Dictionary bytes
      D  dictLength                   10U 0 value                                Dictionary length
       *
+     D inflateGetDictionary...
+     D                 PR            10I 0 extproc('inflateGetDictionary')      Get dictionary
+     D  strm                               like(z_stream)                       Expansion stream
+     D  dictionary                65535    options(*varsize)                    Dictionary bytes
+     D  dictLength                   10U 0                                      Dictionary length
+      *
      D inflateSync     PR            10I 0 extproc('inflateSync')               Sync. expansion
      D  strm                               like(z_stream)                       Expansion stream
       *
diff --git a/contrib/vstudio/vc10/zlibvc.def b/contrib/vstudio/vc10/zlibvc.def
index feea7cf..34b1466 100644
--- a/contrib/vstudio/vc10/zlibvc.def
+++ b/contrib/vstudio/vc10/zlibvc.def
@@ -137,3 +137,6 @@
 
 ; zlib1 v1.2.7 added:
         gzopen_w                                @165
+
+; zlib1 v1.2.8 added:
+        inflateGetDictionary                    @166
diff --git a/contrib/vstudio/vc9/zlibvc.def b/contrib/vstudio/vc9/zlibvc.def
index c1f644d..3af7061 100644
--- a/contrib/vstudio/vc9/zlibvc.def
+++ b/contrib/vstudio/vc9/zlibvc.def
@@ -137,3 +137,6 @@
 
 ; zlib1 v1.2.7 added:
         gzopen_w                                @165
+
+; zlib1 v1.2.8 added:
+        inflateGetDictionary                    @166
diff --git a/inflate.c b/inflate.c
index 47418a1..d1efdb8 100644
--- a/inflate.c
+++ b/inflate.c
@@ -1264,6 +1264,29 @@
     return Z_OK;
 }
 
+int ZEXPORT inflateGetDictionary(strm, dictionary, dictLength)
+z_streamp strm;
+Bytef *dictionary;
+uInt *dictLength;
+{
+    struct inflate_state FAR *state;
+
+    /* check state */
+    if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+    state = (struct inflate_state FAR *)strm->state;
+
+    /* copy dictionary */
+    if (state->whave && dictionary != Z_NULL) {
+        zmemcpy(dictionary, state->window + state->wnext,
+                state->whave - state->wnext);
+        zmemcpy(dictionary + state->whave - state->wnext,
+                state->window, state->wnext);
+    }
+    if (dictLength != Z_NULL)
+        *dictLength = state->whave;
+    return Z_OK;
+}
+
 int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength)
 z_streamp strm;
 const Bytef *dictionary;
diff --git a/win32/zlib.def b/win32/zlib.def
index 0489615..f10fa7a 100644
--- a/win32/zlib.def
+++ b/win32/zlib.def
@@ -17,6 +17,7 @@
     deflatePrime
     deflateSetHeader
     inflateSetDictionary
+    inflateGetDictionary
     inflateSync
     inflateCopy
     inflateReset
diff --git a/zconf.h b/zconf.h
index c71cade..26e7a04 100644
--- a/zconf.h
+++ b/zconf.h
@@ -103,6 +103,7 @@
 #  define inflateReset          z_inflateReset
 #  define inflateReset2         z_inflateReset2
 #  define inflateSetDictionary  z_inflateSetDictionary
+#  define inflateGetDictionary  z_inflateGetDictionary
 #  define inflateSync           z_inflateSync
 #  define inflateSyncPoint      z_inflateSyncPoint
 #  define inflateUndermine      z_inflateUndermine
diff --git a/zconf.h.cmakein b/zconf.h.cmakein
index 1d31b67..5390baa 100644
--- a/zconf.h.cmakein
+++ b/zconf.h.cmakein
@@ -105,6 +105,7 @@
 #  define inflateReset          z_inflateReset
 #  define inflateReset2         z_inflateReset2
 #  define inflateSetDictionary  z_inflateSetDictionary
+#  define inflateGetDictionary  z_inflateGetDictionary
 #  define inflateSync           z_inflateSync
 #  define inflateSyncPoint      z_inflateSyncPoint
 #  define inflateUndermine      z_inflateUndermine
diff --git a/zconf.h.in b/zconf.h.in
index c71cade..26e7a04 100644
--- a/zconf.h.in
+++ b/zconf.h.in
@@ -103,6 +103,7 @@
 #  define inflateReset          z_inflateReset
 #  define inflateReset2         z_inflateReset2
 #  define inflateSetDictionary  z_inflateSetDictionary
+#  define inflateGetDictionary  z_inflateGetDictionary
 #  define inflateSync           z_inflateSync
 #  define inflateSyncPoint      z_inflateSyncPoint
 #  define inflateUndermine      z_inflateUndermine
diff --git a/zlib.h b/zlib.h
index 94909ef..cd47df5 100644
--- a/zlib.h
+++ b/zlib.h
@@ -839,6 +839,21 @@
    inflate().
 */
 
+ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm,
+                                             Bytef *dictionary,
+                                             uInt  *dictLength));
+/*
+     Returns the sliding dictionary being maintained by inflate.  dictLength is
+   set to the number of bytes in the dictionary, and that many bytes are copied
+   to dictionary.  dictionary must have enough space, where 32768 bytes is
+   always enough.  If inflateGetDictionary() is called with dictionary equal to
+   Z_NULL, then only the dictionary length is returned, and nothing is copied.
+   Similary, if dictLength is Z_NULL, then it is not set.
+
+     inflateSetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the
+   stream state is inconsistent.
+*/
+
 ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm));
 /*
      Skips invalid compressed data until a possible full flush point (see above
diff --git a/zlib.map b/zlib.map
index 771f420..d7b4df7 100644
--- a/zlib.map
+++ b/zlib.map
@@ -76,3 +76,7 @@
     gzgetc_;
     inflateResetKeep;
 } ZLIB_1.2.5.1;
+
+ZLIB_1.2.7.1 {
+    inflateSetDictionary;
+} ZLIB_1.2.7;