123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- --- a/gencode.c
- +++ b/gencode.c
- @@ -543,20 +543,6 @@ pcap_compile_nopcap(int snaplen_arg, int
- }
-
- /*
- - * Clean up a "struct bpf_program" by freeing all the memory allocated
- - * in it.
- - */
- -void
- -pcap_freecode(struct bpf_program *program)
- -{
- - program->bf_len = 0;
- - if (program->bf_insns != NULL) {
- - free((char *)program->bf_insns);
- - program->bf_insns = NULL;
- - }
- -}
- -
- -/*
- * Backpatch the blocks in 'list' to 'target'. The 'sense' field indicates
- * which of the jt and jf fields has been resolved and which is a pointer
- * back to another unresolved block (or nil). At least one of the fields
- --- a/pcap.c
- +++ b/pcap.c
- @@ -1087,6 +1087,59 @@ static const u_char charmap[] = {
- (u_char)'\374', (u_char)'\375', (u_char)'\376', (u_char)'\377',
- };
-
- +/*
- + * Clean up a "struct bpf_program" by freeing all the memory allocated
- + * in it.
- + */
- +void
- +pcap_freecode(struct bpf_program *program)
- +{
- + program->bf_len = 0;
- + if (program->bf_insns != NULL) {
- + free((char *)program->bf_insns);
- + program->bf_insns = NULL;
- + }
- +}
- +
- +/*
- + * Make a copy of a BPF program and put it in the "fcode" member of
- + * a "pcap_t".
- + *
- + * If we fail to allocate memory for the copy, fill in the "errbuf"
- + * member of the "pcap_t" with an error message, and return -1;
- + * otherwise, return 0.
- + */
- +int
- +install_bpf_program(pcap_t *p, struct bpf_program *fp)
- +{
- + size_t prog_size;
- +
- + /*
- + * Validate the program.
- + */
- + if (!bpf_validate(fp->bf_insns, fp->bf_len)) {
- + snprintf(p->errbuf, sizeof(p->errbuf),
- + "BPF program is not valid");
- + return (-1);
- + }
- +
- + /*
- + * Free up any already installed program.
- + */
- + pcap_freecode(&p->fcode);
- +
- + prog_size = sizeof(*fp->bf_insns) * fp->bf_len;
- + p->fcode.bf_len = fp->bf_len;
- + p->fcode.bf_insns = (struct bpf_insn *)malloc(prog_size);
- + if (p->fcode.bf_insns == NULL) {
- + snprintf(p->errbuf, sizeof(p->errbuf),
- + "malloc: %s", pcap_strerror(errno));
- + return (-1);
- + }
- + memcpy(p->fcode.bf_insns, fp->bf_insns, prog_size);
- + return (0);
- +}
- +
- int
- pcap_strcasecmp(const char *s1, const char *s2)
- {
- --- a/optimize.c
- +++ b/optimize.c
- @@ -2203,45 +2203,6 @@ icode_to_fcode(struct block *root, u_int
- return fp;
- }
-
- -/*
- - * Make a copy of a BPF program and put it in the "fcode" member of
- - * a "pcap_t".
- - *
- - * If we fail to allocate memory for the copy, fill in the "errbuf"
- - * member of the "pcap_t" with an error message, and return -1;
- - * otherwise, return 0.
- - */
- -int
- -install_bpf_program(pcap_t *p, struct bpf_program *fp)
- -{
- - size_t prog_size;
- -
- - /*
- - * Validate the program.
- - */
- - if (!bpf_validate(fp->bf_insns, fp->bf_len)) {
- - snprintf(p->errbuf, sizeof(p->errbuf),
- - "BPF program is not valid");
- - return (-1);
- - }
- -
- - /*
- - * Free up any already installed program.
- - */
- - pcap_freecode(&p->fcode);
- -
- - prog_size = sizeof(*fp->bf_insns) * fp->bf_len;
- - p->fcode.bf_len = fp->bf_len;
- - p->fcode.bf_insns = (struct bpf_insn *)malloc(prog_size);
- - if (p->fcode.bf_insns == NULL) {
- - snprintf(p->errbuf, sizeof(p->errbuf),
- - "malloc: %s", pcap_strerror(errno));
- - return (-1);
- - }
- - memcpy(p->fcode.bf_insns, fp->bf_insns, prog_size);
- - return (0);
- -}
- -
- #ifdef BDEBUG
- static void
- dot_dump_node(struct block *block, struct bpf_program *prog, FILE *out)
- --- a/pcap-common.c
- +++ b/pcap-common.c
- @@ -1372,14 +1372,23 @@ swap_pseudo_headers(int linktype, struct
- switch (linktype) {
-
- case DLT_USB_LINUX:
- +#ifndef PCAP_SUPPORT_USB
- + return;
- +#endif
- swap_linux_usb_header(hdr, data, 0);
- break;
-
- case DLT_USB_LINUX_MMAPPED:
- +#ifndef PCAP_SUPPORT_USB
- + return;
- +#endif
- swap_linux_usb_header(hdr, data, 1);
- break;
-
- case DLT_NFLOG:
- +#ifndef PCAP_SUPPORT_NETFILTER
- + return;
- +#endif
- swap_nflog_header(hdr, data);
- break;
- }
|