$NetBSD: patch-bf,v 1.1.1.1 2005/01/02 02:51:44 cube Exp $

--- pppdump/bsd-comp.c.orig	2004-02-02 04:36:46.000000000 +0100
+++ pppdump/bsd-comp.c
@@ -46,8 +46,15 @@
 #include <stddef.h>
 #include <stdlib.h>
 #include <string.h>
+#include "pppdump.h"
+#ifdef __NetBSD__
+#include <net/ppp_defs.h>
+#include <net/ppp-comp.h>
+#else
 #include "ppp_defs.h"
 #include "ppp-comp.h"
+#endif
+
 
 #if DO_BSD_COMPRESS
 
@@ -128,9 +135,8 @@ static void	*bsd_decomp_alloc __P((u_cha
 static void	bsd_free __P((void *state));
 static int	bsd_decomp_init __P((void *state, u_char *options, int opt_len,
 				     int unit, int hdrlen, int mru, int debug));
-static void	bsd_incomp __P((void *state, u_char *dmsg, int len));
-static int	bsd_decompress __P((void *state, u_char *cmp, int inlen,
-				    u_char *dmp, int *outlen));
+static void	bsd_incomp __P((void *state, PACKETPTR in));
+static int	bsd_decompress __P((void *state, PACKETPTR in, PACKETPTR *out));
 static void	bsd_reset __P((void *state));
 static void	bsd_comp_stats __P((void *state, struct compstat *stats));
 
@@ -139,6 +145,12 @@ static void	bsd_comp_stats __P((void *st
  */
 struct compressor ppp_bsd_compress = {
     CI_BSD_COMPRESS,		/* compress_proto */
+    NULL,			/* comp_alloc */
+    NULL,			/* comp_free */
+    NULL,			/* comp_init */
+    NULL,			/* comp_reset */
+    NULL,			/* comp_compress */
+    NULL,			/* comp_stat */
     bsd_decomp_alloc,		/* decomp_alloc */
     bsd_free,			/* decomp_free */
     bsd_decomp_init,		/* decomp_init */
@@ -170,6 +182,12 @@ struct compressor ppp_bsd_compress = {
 #define RATIO_SCALE	(1<<RATIO_SCALE_LOG)
 #define RATIO_MAX	(0x7fffffff>>RATIO_SCALE_LOG)
 
+static void bsd_clear __P((struct bsd_db *));
+static int bsd_check __P((struct bsd_db *));
+static void *bsd_alloc __P((u_char *, int, int));
+static int bsd_init __P((struct bsd_db *, u_char *, int, int, int, int,
+    int, int));
+
 /*
  * clear the dictionary
  */
@@ -257,7 +275,7 @@ bsd_comp_stats(state, stats)
     stats->ratio = db->in_count;
     out = db->bytes_out;
     if (stats->ratio <= 0x7fffff)
-	stats->ratio <<= 8;
+	stats->ratio = ((stats->ratio) << 8);
     else
 	out >>= 8;
     if (out != 0)
@@ -383,7 +401,7 @@ bsd_init(db, options, opt_len, unit, hdr
 	|| options[0] != CI_BSD_COMPRESS || options[1] != CILEN_BSD_COMPRESS
 	|| BSD_VERSION(options[2]) != BSD_CURRENT_VERSION
 	|| BSD_NBITS(options[2]) != db->maxbits
-	|| decomp && db->lens == NULL)
+	|| (decomp && db->lens == NULL))
 	return 0;
 
     if (decomp) {
@@ -424,10 +442,9 @@ bsd_decomp_init(state, options, opt_len,
  * incompressible data by pretending to compress the incoming data.
  */
 static void
-bsd_incomp(state, dmsg, mlen)
+bsd_incomp(state, in)
     void *state;
-    u_char *dmsg;
-    int mlen;
+    PACKETPTR in;
 {
     struct bsd_db *db = (struct bsd_db *) state;
     u_int hshift = db->hshift;
@@ -442,11 +459,11 @@ bsd_incomp(state, dmsg, mlen)
     u_char *rptr;
     u_int ent;
 
-    rptr = dmsg;
+    rptr = in->buf;
     ent = rptr[0];		/* get the protocol */
     if (ent == 0) {
 	++rptr;
-	--mlen;
+	in->len--;
 	ent = rptr[0];
     }
     if ((ent & 1) == 0 || ent < 0x21 || ent > 0xf9)
@@ -455,7 +472,7 @@ bsd_incomp(state, dmsg, mlen)
     db->seqno++;
     ilen = 1;		/* count the protocol as 1 byte */
     ++rptr;
-    slen = dmsg + mlen - rptr;
+    slen = in->buf + in->len - rptr;
     ilen += slen;
     for (; slen > 0; --slen) {
 	c = *rptr++;
@@ -544,10 +561,10 @@ bsd_incomp(state, dmsg, mlen)
  * compression, even though they are detected by inspecting the input.
  */
 static int
-bsd_decompress(state, cmsg, inlen, dmp, outlenp)
+bsd_decompress(state, in, out)
     void *state;
-    u_char *cmsg, *dmp;
-    int inlen, *outlenp;
+    PACKETPTR in;
+    PACKETPTR *out;
 {
     struct bsd_db *db = (struct bsd_db *) state;
     u_int max_ent = db->max_ent;
@@ -556,19 +573,19 @@ bsd_decompress(state, cmsg, inlen, dmp, 
     u_int n_bits = db->n_bits;
     u_int tgtbitno = 32-n_bits;	/* bitno when we have a code */
     struct bsd_dict *dictp;
-    int explen, i, seq, len;
+    int explen, seq, len;
     u_int incode, oldcode, finchar;
     u_char *p, *rptr, *wptr;
     int ilen;
-    int dlen, space, codelen, extra;
+    int dlen, codelen, extra;
 
-    rptr = cmsg;
+    rptr = in->buf;
     if (*rptr == 0)
 	++rptr;
     ++rptr;			/* skip protocol (assumed 0xfd) */
     seq = (rptr[0] << 8) + rptr[1];
     rptr += BSD_OVHD;
-    ilen = len = cmsg + inlen - rptr;
+    ilen = len = in->buf + in->len - rptr;
 
     /*
      * Check the sequence number and give up if it is not what we expect.
@@ -580,7 +597,7 @@ bsd_decompress(state, cmsg, inlen, dmp, 
 	return DECOMP_ERROR;
     }
 
-    wptr = dmp + db->hdrlen;
+    wptr = (*out)->buf + db->hdrlen;
 
     oldcode = CLEAR;
     explen = 0;
@@ -616,7 +633,7 @@ bsd_decompress(state, cmsg, inlen, dmp, 
 	}
 
 	if (incode > max_ent + 2 || incode > db->maxmaxcode
-	    || incode > max_ent && oldcode == CLEAR) {
+	    || (incode > max_ent && oldcode == CLEAR)) {
 	    if (db->debug) {
 		printf("bsd_decomp%d: bad code 0x%x oldcode=0x%x ",
 		       db->unit, incode, oldcode);
@@ -729,7 +746,7 @@ bsd_decompress(state, cmsg, inlen, dmp, 
 	}
 	oldcode = incode;
     }
-    *outlenp = wptr - (dmp + db->hdrlen);
+    (*out)->len = wptr - ((*out)->buf + db->hdrlen);
 
     /*
      * Keep the checkpoint right so that incompressible packets
