]> git.ozlabs.org Git - ppp.git/blobdiff - modules/deflate.c
fixes from Farrell
[ppp.git] / modules / deflate.c
index 57294a9503a94215d1682f7253733c7f512669ba..7ec776667b3f24d0e271c0b90a5201d8dd9e2e3f 100644 (file)
@@ -27,7 +27,7 @@
  * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
  * OR MODIFICATIONS.
  *
- * $Id: deflate.c,v 1.2 1996/04/04 02:44:56 paulus Exp $
+ * $Id: deflate.c,v 1.5 1997/04/30 05:43:39 paulus Exp $
  */
 
 #ifdef AIX4
 
 #define PACKETPTR      mblk_t *
 #include <net/ppp-comp.h>
+
+#ifdef __osf__
+#include "zlib.h"
+#else
 #include "common/zlib.h"
+#endif
 
 #if DO_DEFLATE
 
+#define DEFLATE_DEBUG  1
+
 /*
  * State for a Deflate (de)compressor.
  */
@@ -61,8 +68,9 @@ struct deflate_state {
 
 #define DEFLATE_OVHD   2               /* Deflate overhead/packet */
 
-static void    *zalloc __P((void *, u_int items, u_int size));
-static void    zfree __P((void *, void *ptr, u_int nb));
+static void    *z_alloc __P((void *, u_int items, u_int size));
+static void    *z_alloc_init __P((void *, u_int items, u_int size));
+static void    z_free __P((void *, void *ptr, u_int nb));
 static void    *z_comp_alloc __P((u_char *options, int opt_len));
 static void    *z_decomp_alloc __P((u_char *options, int opt_len));
 static void    z_comp_free __P((void *state));
@@ -106,7 +114,19 @@ struct compressor ppp_deflate = {
  * Space allocation and freeing routines for use by zlib routines.
  */
 static void *
-zalloc(notused, items, size)
+z_alloc_init(notused, items, size)
+    void *notused;
+    u_int items, size;
+{
+#ifdef __osf__
+    return ALLOC_SLEEP(items * size);
+#else
+    return ALLOC_NOSLEEP(items * size);
+#endif
+}
+
+static void *
+z_alloc(notused, items, size)
     void *notused;
     u_int items, size;
 {
@@ -114,7 +134,7 @@ zalloc(notused, items, size)
 }
 
 static void
-zfree(notused, ptr, nbytes)
+z_free(notused, ptr, nbytes)
     void *notused;
     void *ptr;
     u_int nbytes;
@@ -142,13 +162,20 @@ z_comp_alloc(options, opt_len)
     if (w_size < DEFLATE_MIN_SIZE || w_size > DEFLATE_MAX_SIZE)
        return NULL;
 
+
+#ifdef __osf__
+    state = (struct deflate_state *) ALLOC_SLEEP(sizeof(*state));
+#else
     state = (struct deflate_state *) ALLOC_NOSLEEP(sizeof(*state));
+#endif
+
     if (state == NULL)
        return NULL;
 
     state->strm.next_in = NULL;
-    state->strm.zalloc = (alloc_func) zalloc;
-    state->strm.zfree = (free_func) zfree;
+    state->strm.zalloc = (alloc_func) z_alloc;
+    state->strm.zalloc_init = (alloc_func) z_alloc_init;
+    state->strm.zfree = (free_func) z_free;
     if (deflateInit2(&state->strm, Z_DEFAULT_COMPRESSION, DEFLATE_METHOD_VAL,
                     -w_size, 8, Z_DEFAULT_STRATEGY, DEFLATE_OVHD+2) != Z_OK) {
        FREE(state, sizeof(*state));
@@ -374,13 +401,18 @@ z_decomp_alloc(options, opt_len)
     if (w_size < DEFLATE_MIN_SIZE || w_size > DEFLATE_MAX_SIZE)
        return NULL;
 
+#ifdef __osf__
+    state = (struct deflate_state *) ALLOC_SLEEP(sizeof(*state));
+#else
     state = (struct deflate_state *) ALLOC_NOSLEEP(sizeof(*state));
+#endif
     if (state == NULL)
        return NULL;
 
     state->strm.next_out = NULL;
-    state->strm.zalloc = (alloc_func) zalloc;
-    state->strm.zfree = (free_func) zfree;
+    state->strm.zalloc = (alloc_func) z_alloc;
+    state->strm.zalloc_init = (alloc_func) z_alloc_init;
+    state->strm.zfree = (free_func) z_free;
     if (inflateInit2(&state->strm, -w_size) != Z_OK) {
        FREE(state, sizeof(*state));
        return NULL;
@@ -480,7 +512,9 @@ z_decompress(arg, mi, mop)
     /* Check the sequence number. */
     seq = (hdr[PPP_HDRLEN] << 8) + hdr[PPP_HDRLEN+1];
     if (seq != state->seqno) {
+#if !DEFLATE_DEBUG
        if (state->debug)
+#endif
            printf("z_decompress%d: bad seq # %d, expected %d\n",
                   state->unit, seq, state->seqno);
        return DECOMP_ERROR;
@@ -526,7 +560,9 @@ z_decompress(arg, mi, mop)
     for (;;) {
        r = inflate(&state->strm, flush);
        if (r != Z_OK) {
+#if !DEFLATE_DEBUG
            if (state->debug)
+#endif
                printf("z_decompress%d: inflate returned %d (%s)\n",
                       state->unit, r, (state->strm.msg? state->strm.msg: ""));
            freemsg(mo_head);
@@ -574,6 +610,12 @@ z_decompress(arg, mi, mop)
     mo->b_wptr += ospace - state->strm.avail_out;
     olen += ospace - state->strm.avail_out;
 
+#if DEFLATE_DEBUG
+    if (olen > state->mru + PPP_HDRLEN)
+       printf("ppp_deflate%d: exceeded mru (%d > %d)\n",
+              state->unit, olen, state->mru + PPP_HDRLEN);
+#endif
+
     state->stats.unc_bytes += olen;
     state->stats.unc_packets++;
     state->stats.comp_bytes += rlen;
@@ -627,10 +669,11 @@ z_incomp(arg, mi)
        r = inflateIncomp(&state->strm);
        if (r != Z_OK) {
            /* gak! */
-           if (state->debug) {
+#if !DEFLATE_DEBUG
+           if (state->debug)
+#endif
                printf("z_incomp%d: inflateIncomp returned %d (%s)\n",
                       state->unit, r, (state->strm.msg? state->strm.msg: ""));
-           }
            return;
        }
        mi = mi->b_cont;