134 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- a/gencode.c
 | |
| +++ b/gencode.c
 | |
| @@ -491,20 +491,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
 | |
| @@ -748,6 +748,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
 | |
| @@ -2292,45 +2292,6 @@ icode_to_fcode(root, lenp)
 | |
|  	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
 | |
|  opt_dump(root)
 |