$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 #include #include +#include "pppdump.h" +#ifdef __NetBSD__ +#include +#include +#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) +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