diff options
| -rw-r--r-- | package/libpcap/Makefile | 3 | ||||
| -rw-r--r-- | package/libpcap/patches/105-space_optimization.patch | 117 | 
2 files changed, 119 insertions, 1 deletions
| diff --git a/package/libpcap/Makefile b/package/libpcap/Makefile index cf0304b4c..620fdb94b 100644 --- a/package/libpcap/Makefile +++ b/package/libpcap/Makefile @@ -30,7 +30,8 @@ define Package/libpcap/description   packet capture.  endef -TARGET_CFLAGS += $(FPIC) +TARGET_CFLAGS += \ +	-ffunction-sections -fdata-sections  CONFIGURE_ARGS += \  	--enable-shared \ diff --git a/package/libpcap/patches/105-space_optimization.patch b/package/libpcap/patches/105-space_optimization.patch new file mode 100644 index 000000000..17265cd66 --- /dev/null +++ b/package/libpcap/patches/105-space_optimization.patch @@ -0,0 +1,117 @@ +--- a/gencode.c ++++ b/gencode.c +@@ -429,20 +429,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/optimize.c ++++ b/optimize.c +@@ -2263,36 +2263,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; +- +-	/* +-	 * 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) +--- a/pcap.c ++++ b/pcap.c +@@ -463,6 +463,52 @@ 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; ++ ++	/* ++	 * 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) + { | 
