]> The Tcpdump Group git mirrors - libpcap/blobdiff - bpf_image.c
Have routines to set various internal debugging flags.
[libpcap] / bpf_image.c
index 06c0b6ea75bc5d1b0aeb98dc5ebe65ef08331b16..01ec536dfd622f38fe36bde9853cb719c4199d43 100644 (file)
  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
-#ifndef lint
-static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/libpcap/bpf_image.c,v 1.26 2003-11-15 23:23:57 guy Exp $ (LBL)";
-#endif
-
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
+#ifdef _WIN32
+#include <pcap-stdinc.h>
+#else /* _WIN32 */
+#if HAVE_INTTYPES_H
+#include <inttypes.h>
+#elif HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#ifdef HAVE_SYS_BITYPES_H
+#include <sys/bitypes.h>
+#endif
+#include <sys/types.h>
+#endif /* _WIN32 */
+
 #include <stdio.h>
 #include <string.h>
 
@@ -39,11 +48,11 @@ static const char rcsid[] _U_ =
 
 char *
 bpf_image(p, n)
-       struct bpf_insn *p;
+       const struct bpf_insn *p;
        int n;
 {
        int v;
-       char *fmt, *op;
+       const char *fmt, *op;
        static char image[256];
        char operand[64];
 
@@ -202,6 +211,11 @@ bpf_image(p, n)
                fmt = "x";
                break;
 
+       case BPF_ALU|BPF_MOD|BPF_X:
+               op = "mod";
+               fmt = "x";
+               break;
+
        case BPF_ALU|BPF_AND|BPF_X:
                op = "and";
                fmt = "x";
@@ -212,6 +226,11 @@ bpf_image(p, n)
                fmt = "x";
                break;
 
+       case BPF_ALU|BPF_XOR|BPF_X:
+               op = "xor";
+               fmt = "x";
+               break;
+
        case BPF_ALU|BPF_LSH|BPF_X:
                op = "lsh";
                fmt = "x";
@@ -242,6 +261,11 @@ bpf_image(p, n)
                fmt = "#%d";
                break;
 
+       case BPF_ALU|BPF_MOD|BPF_K:
+               op = "mod";
+               fmt = "#%d";
+               break;
+
        case BPF_ALU|BPF_AND|BPF_K:
                op = "and";
                fmt = "#0x%x";
@@ -252,6 +276,11 @@ bpf_image(p, n)
                fmt = "#0x%x";
                break;
 
+       case BPF_ALU|BPF_XOR|BPF_K:
+               op = "xor";
+               fmt = "#0x%x";
+               break;
+
        case BPF_ALU|BPF_LSH|BPF_K:
                op = "lsh";
                fmt = "#%d";
@@ -277,12 +306,15 @@ bpf_image(p, n)
                fmt = "";
                break;
        }
-       (void)snprintf(operand, sizeof operand, fmt, v);
-       (void)snprintf(image, sizeof image,
-                     (BPF_CLASS(p->code) == BPF_JMP &&
-                      BPF_OP(p->code) != BPF_JA) ?
-                     "(%03d) %-8s %-16s jt %d\tjf %d"
-                     : "(%03d) %-8s %s",
-                     n, op, operand, n + 1 + p->jt, n + 1 + p->jf);
+       (void)pcap_snprintf(operand, sizeof operand, fmt, v);
+       if (BPF_CLASS(p->code) == BPF_JMP && BPF_OP(p->code) != BPF_JA) {
+               (void)pcap_snprintf(image, sizeof image,
+                             "(%03d) %-8s %-16s jt %d\tjf %d",
+                             n, op, operand, n + 1 + p->jt, n + 1 + p->jf);
+       } else {
+               (void)pcap_snprintf(image, sizeof image,
+                             "(%03d) %-8s %s",
+                             n, op, operand);
+       }
        return image;
 }