summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.nmake1
-rw-r--r--acinclude.m42
-rw-r--r--capture-wpcap.c20
-rw-r--r--capture_loop.c6
-rw-r--r--config.nmake6
-rw-r--r--tethereal.c6
6 files changed, 37 insertions, 4 deletions
diff --git a/Makefile.nmake b/Makefile.nmake
index 7022520aaf..8c681ac33a 100644
--- a/Makefile.nmake
+++ b/Makefile.nmake
@@ -205,6 +205,7 @@ config.h : config.h.win32 config.nmake
-e "s/@HAVE_PCAP_FINDALLDEVS@/$(PCAP_FINDALLDEVS_CONFIG)/" \
-e "s/@HAVE_PCAP_DATALINK_NAME_TO_VAL@/$(PCAP_DATALINK_NAME_TO_VAL_CONFIG)/" \
-e "s/@HAVE_PCAP_DATALINK_VAL_TO_NAME@/$(PCAP_DATALINK_VAL_TO_NAME_CONFIG)/" \
+ -e "s/@HAVE_PCAP_LIB_VERSION@/$(PCAP_LIB_VERSION_CONFIG)/" \
-e "s/@HAVE_LIBETHEREALDLL@/$(LIBETHEREAL_CONFIG)/" \
-e "s/@WPCAP_CONSTIFIED@/$(WPCAP_CONSTIFIED_CONFIG)/" \
< config.h.win32 > $@
diff --git a/acinclude.m4 b/acinclude.m4
index b29eabb588..334c13d7c9 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -419,7 +419,7 @@ and did you also install that package?]]))
else
AC_MSG_RESULT(no)
fi
- AC_CHECK_FUNCS(pcap_open_dead)
+ AC_CHECK_FUNCS(pcap_open_dead pcap_freecode)
#
# Later versions of Mac OS X 10.3[.x] ship a pcap.h that
# doesn't define pcap_if_t but ship an 0.8[.x] libpcap,
diff --git a/capture-wpcap.c b/capture-wpcap.c
index 7d88073e69..9163b2997d 100644
--- a/capture-wpcap.c
+++ b/capture-wpcap.c
@@ -65,6 +65,7 @@ static int (*p_pcap_lookupnet) (char *, bpf_u_int32 *, bpf_u_int32 *,
static pcap_t* (*p_pcap_open_live) (char *, int, int, int, char *);
#endif
static int (*p_pcap_loop) (pcap_t *, int, pcap_handler, guchar *);
+static void (*p_pcap_freecode) (struct bpf_program *);
#ifdef HAVE_PCAP_FINDALLDEVS
static int (*p_pcap_findalldevs) (pcap_if_t **, char *);
static void (*p_pcap_freealldevs) (pcap_if_t *);
@@ -75,7 +76,9 @@ static int (*p_pcap_datalink_name_to_val) (const char *);
#ifdef HAVE_PCAP_DATALINK_VAL_TO_NAME
static const char *(*p_pcap_datalink_val_to_name) (int);
#endif
+#ifdef HAVE_PCAP_LIB_VERSION
static const char *(*p_pcap_lib_version) (void);
+#endif
static int (*p_pcap_setbuff) (pcap_t *, int dim);
typedef struct {
@@ -104,6 +107,7 @@ load_wpcap(void)
SYM(pcap_lookupnet, FALSE),
SYM(pcap_open_live, FALSE),
SYM(pcap_loop, FALSE),
+ SYM(pcap_freecode, FALSE),
#ifdef HAVE_PCAP_FINDALLDEVS
SYM(pcap_findalldevs, TRUE),
SYM(pcap_freealldevs, TRUE),
@@ -114,7 +118,9 @@ load_wpcap(void)
#ifdef HAVE_PCAP_DATALINK_VAL_TO_NAME
SYM(pcap_datalink_val_to_name, TRUE),
#endif
+#ifdef HAVE_PCAP_LIB_VERSION
SYM(pcap_lib_version, TRUE),
+#endif
SYM(pcap_setbuff, TRUE),
{ NULL, NULL, FALSE }
};
@@ -179,7 +185,6 @@ pcap_dispatch(pcap_t *a, int b, pcap_handler c, guchar *d)
return p_pcap_dispatch(a, b, c, d);
}
-
int
pcap_snapshot(pcap_t *a)
{
@@ -187,7 +192,6 @@ pcap_snapshot(pcap_t *a)
return p_pcap_snapshot(a);
}
-
int
pcap_datalink(pcap_t *a)
{
@@ -246,6 +250,13 @@ pcap_loop(pcap_t *a, int b, pcap_handler c, guchar *d)
return p_pcap_loop(a, b, c, d);
}
+void
+pcap_freecode(struct bpf_program *a)
+{
+ g_assert(has_wpcap);
+ p_pcap_freecode(a);
+}
+
#ifdef HAVE_PCAP_FINDALLDEVS
int
pcap_findalldevs(pcap_if_t **a, char *b)
@@ -621,9 +632,12 @@ get_runtime_pcap_version(GString *str)
}
g_string_sprintfa(str, "with ");
+#ifdef HAVE_PCAP_LIB_VERSION
if (p_pcap_lib_version != NULL)
g_string_sprintfa(str, p_pcap_lib_version());
- else if (packetVer != NULL)
+ else
+#endif
+ if (packetVer != NULL)
g_string_sprintfa(str, "WinPcap (%s)", packetVer);
else
g_string_append(str, "WinPcap (version unknown)");
diff --git a/capture_loop.c b/capture_loop.c
index 88fe54241b..1f947fa6f1 100644
--- a/capture_loop.c
+++ b/capture_loop.c
@@ -764,8 +764,14 @@ static int capture_loop_init_filter(loop_data *ld, const gchar * iface, gchar *
if (pcap_setfilter(ld->pcap_h, &fcode) < 0) {
g_snprintf(errmsg, errmsg_len, "Can't install filter (%s).",
pcap_geterr(ld->pcap_h));
+#ifdef HAVE_PCAP_FREECODE
+ pcap_freecode(&fcode);
+#endif
return FALSE;
}
+#ifdef HAVE_PCAP_FREECODE
+ pcap_freecode(&fcode);
+#endif
}
return TRUE;
diff --git a/config.nmake b/config.nmake
index 865e747528..59ee1b1a33 100644
--- a/config.nmake
+++ b/config.nmake
@@ -284,11 +284,17 @@ PCAP_FINDALLDEVS_CONFIG=
PCAP_DATALINK_VAL_TO_NAME_CONFIG=
WPCAP_CONSTIFIED=
!ENDIF
+!IF "$(WINPCAP_VERSION)" == "3.1"
+PCAP_LIB_VERSION_CONFIG=^#define HAVE_PCAP_LIB_VERSION 1
+!ELSE
+PCAP_LIB_VERSION_CONFIG=
+!ENDIF
!ELSE
WINPCAP_CONFIG=
PCAP_FINDALLDEVS_CONFIG=
PCAP_DATALINK_NAME_TO_VAL_CONFIG=
PCAP_DATALINK_VAL_TO_NAME_CONFIG=
+PCAP_LIB_VERSION_CONFIG=
WPCAP_CONSTIFIED=
!ENDIF
diff --git a/tethereal.c b/tethereal.c
index ef6e5cd2af..1bdf2e48e3 100644
--- a/tethereal.c
+++ b/tethereal.c
@@ -1651,8 +1651,14 @@ capture(char *save_file, int out_file_type)
if (pcap_setfilter(ld.pch, &fcode) < 0) {
snprintf(errmsg, sizeof errmsg, "Can't install filter (%s).",
pcap_geterr(ld.pch));
+#ifdef HAVE_PCAP_FREECODE
+ pcap_freecode(&fcode);
+#endif
goto error;
}
+#ifdef HAVE_PCAP_FREECODE
+ pcap_freecode(&fcode);
+#endif
}
/* Set up to write to the capture file. */