]> The Tcpdump Group git mirrors - libpcap/blobdiff - gencode.c
Fix building without protochain support. (GH #852)
[libpcap] / gencode.c
index 61932901b8fcf51ee6e66e3e74beeefde9af3944..ea272e17649aff9c1123b88d8f0c01ec76f55067 100644 (file)
--- a/gencode.c
+++ b/gencode.c
@@ -1,4 +1,3 @@
-/*#define CHASE_CHAIN*/
 /*
  * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998
  *     The Regents of the University of California.  All rights reserved.
@@ -565,7 +564,9 @@ static struct block *gen_portrangeop6(compiler_state_t *, u_int, u_int,
     bpf_u_int32, int);
 static struct block *gen_portrange6(compiler_state_t *, u_int, u_int, int, int);
 static int lookup_proto(compiler_state_t *, const char *, int);
+#if !defined(NO_PROTOCHAIN)
 static struct block *gen_protochain(compiler_state_t *, bpf_u_int32, int);
+#endif /* !defined(NO_PROTOCHAIN) */
 static struct block *gen_proto(compiler_state_t *, bpf_u_int32, int, int);
 static struct slist *xfer_to_x(compiler_state_t *, struct arth *);
 static struct slist *xfer_to_a(compiler_state_t *, struct arth *);
@@ -732,7 +733,7 @@ pcap_compile(pcap_t *p, struct bpf_program *program,
        if (!p->activated) {
                snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
                    "not-yet-activated pcap_t passed to pcap_compile");
-               return (-1);
+               return (PCAP_ERROR);
        }
 
 #ifdef _WIN32
@@ -780,7 +781,7 @@ pcap_compile(pcap_t *p, struct bpf_program *program,
        if (cstate.snaplen == 0) {
                snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
                         "snaplen of 0 rejects all packets");
-               rc = -1;
+               rc = PCAP_ERROR;
                goto quit;
        }
 
@@ -796,7 +797,7 @@ pcap_compile(pcap_t *p, struct bpf_program *program,
        pcap_set_extra(&cstate, scanner);
 
        if (init_linktype(&cstate, p) == -1) {
-               rc = -1;
+               rc = PCAP_ERROR;
                goto quit;
        }
        if (pcap_parse(scanner, &cstate) != 0) {
@@ -806,7 +807,7 @@ pcap_compile(pcap_t *p, struct bpf_program *program,
 #endif
                if (cstate.e != NULL)
                        free(cstate.e);
-               rc = -1;
+               rc = PCAP_ERROR;
                goto quit;
        }
 
@@ -815,7 +816,7 @@ pcap_compile(pcap_t *p, struct bpf_program *program,
                 * Catch errors reported by gen_retblk().
                 */
                if (setjmp(cstate.top_ctx)) {
-                       rc = -1;
+                       rc = PCAP_ERROR;
                        goto quit;
                }
                cstate.ic.root = gen_retblk(&cstate, cstate.snaplen);
@@ -824,14 +825,14 @@ pcap_compile(pcap_t *p, struct bpf_program *program,
        if (optimize && !cstate.no_optimize) {
                if (bpf_optimize(&cstate.ic, p->errbuf) == -1) {
                        /* Failure */
-                       rc = -1;
+                       rc = PCAP_ERROR;
                        goto quit;
                }
                if (cstate.ic.root == NULL ||
                    (cstate.ic.root->s.code == (BPF_RET|BPF_K) && cstate.ic.root->s.k == 0)) {
                        (void)snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
                            "expression rejects all packets");
-                       rc = -1;
+                       rc = PCAP_ERROR;
                        goto quit;
                }
        }
@@ -839,7 +840,7 @@ pcap_compile(pcap_t *p, struct bpf_program *program,
            cstate.ic.root, &len, p->errbuf);
        if (program->bf_insns == NULL) {
                /* Failure */
-               rc = -1;
+               rc = PCAP_ERROR;
                goto quit;
        }
        program->bf_len = len;
@@ -877,7 +878,7 @@ pcap_compile_nopcap(int snaplen_arg, int linktype_arg,
 
        p = pcap_open_dead(linktype_arg, snaplen_arg);
        if (p == NULL)
-               return (-1);
+               return (PCAP_ERROR);
        ret = pcap_compile(p, program, buf, optimize, mask);
        pcap_close(p);
        return (ret);
@@ -6071,20 +6072,10 @@ lookup_proto(compiler_state_t *cstate, const char *name, int proto)
        return v;
 }
 
-#if 0
-struct stmt *
-gen_joinsp(struct stmt **s, int n)
-{
-       return NULL;
-}
-#endif
-
+#if !defined(NO_PROTOCHAIN)
 static struct block *
 gen_protochain(compiler_state_t *cstate, bpf_u_int32 v, int proto)
 {
-#ifdef NO_PROTOCHAIN
-       return gen_proto(cstate, v, proto);
-#else
        struct block *b0, *b;
        struct slist *s[100];
        int fix2, fix3, fix4, fix5;
@@ -6378,8 +6369,8 @@ gen_protochain(compiler_state_t *cstate, bpf_u_int32 v, int proto)
 
        gen_and(b0, b);
        return b;
-#endif
 }
+#endif /* !defined(NO_PROTOCHAIN) */
 
 static struct block *
 gen_check_802_11_data_frame(compiler_state_t *cstate)
@@ -6420,9 +6411,7 @@ static struct block *
 gen_proto(compiler_state_t *cstate, bpf_u_int32 v, int proto, int dir)
 {
        struct block *b0, *b1;
-#ifndef CHASE_CHAIN
        struct block *b2;
-#endif
 
        if (dir != Q_DEFAULT)
                bpf_error(cstate, "direction applied to 'proto'");
@@ -6454,11 +6443,7 @@ gen_proto(compiler_state_t *cstate, bpf_u_int32 v, int proto, int dir)
                 * So we always check for ETHERTYPE_IP.
                 */
                b0 = gen_linktype(cstate, ETHERTYPE_IP);
-#ifndef CHASE_CHAIN
                b1 = gen_cmp(cstate, OR_LINKPL, 9, BPF_B, v);
-#else
-               b1 = gen_protochain(cstate, v, Q_IP);
-#endif
                gen_and(b0, b1);
                return b1;
 
@@ -6520,7 +6505,6 @@ gen_proto(compiler_state_t *cstate, bpf_u_int32 v, int proto, int dir)
 
        case Q_IPV6:
                b0 = gen_linktype(cstate, ETHERTYPE_IPV6);
-#ifndef CHASE_CHAIN
                /*
                 * Also check for a fragment header before the final
                 * header.
@@ -6530,9 +6514,6 @@ gen_proto(compiler_state_t *cstate, bpf_u_int32 v, int proto, int dir)
                gen_and(b2, b1);
                b2 = gen_cmp(cstate, OR_LINKPL, 6, BPF_B, v);
                gen_or(b2, b1);
-#else
-               b1 = gen_protochain(cstate, v, Q_IPV6);
-#endif
                gen_and(b0, b1);
                return b1;
 
@@ -6972,12 +6953,14 @@ gen_scode(compiler_state_t *cstate, const char *name, struct qual q)
                else
                        bpf_error(cstate, "unknown protocol: %s", name);
 
+#if !defined(NO_PROTOCHAIN)
        case Q_PROTOCHAIN:
                real_proto = lookup_proto(cstate, name, proto);
                if (real_proto >= 0)
                        return gen_protochain(cstate, real_proto, proto);
                else
                        bpf_error(cstate, "unknown protocol: %s", name);
+#endif /* !defined(NO_PROTOCHAIN) */
 
        case Q_UNDEF:
                syntax(cstate);
@@ -7150,8 +7133,10 @@ gen_ncode(compiler_state_t *cstate, const char *s, bpf_u_int32 v, struct qual q)
        case Q_PROTO:
                return gen_proto(cstate, v, proto, dir);
 
+#if !defined(NO_PROTOCHAIN)
        case Q_PROTOCHAIN:
                return gen_protochain(cstate, v, proto);
+#endif
 
        case Q_UNDEF:
                syntax(cstate);