aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2017-05-11 12:57:28 -0700
committerGuy Harris <guy@alum.mit.edu>2017-05-11 19:58:15 +0000
commit7321183716f1e6e28584ea356b0782b06f330fe5 (patch)
tree304dbc6154a841e2dc35262735425f481f7d3efb
parent6f1e6d24c64960bf347c1990fcca8dfdaaf44c68 (diff)
Put the HAVE_REMOTE hack into wsutil/wspcap.h, and include that file.
Have a header file that defines HAVE_REMOTE if HAVE_PCAP_REMOTE is defined, and then includes pcap.h. Replace all other includes of pcap.h, and the definition of HAVE_REMOTE, with includes of that file. Check for anything other than wspcap.h including pcap.h in checkAPIs.pl. Change-Id: I3cbee8208944ad6f006f568b3fe3134e10b2a883 Reviewed-on: https://code.wireshark.org/review/21605 Reviewed-by: Guy Harris <guy@alum.mit.edu>
-rw-r--r--caputils/capture-pcap-util-unix.c14
-rw-r--r--caputils/capture-pcap-util.h14
-rw-r--r--caputils/capture_wpcap_packet.c14
-rw-r--r--extcap/androiddump.c14
-rw-r--r--ringbuffer.c14
-rwxr-xr-xtools/checkAPIs.pl13
-rw-r--r--trigcap.c14
-rw-r--r--ui/gtk/airpcap_dlg.c14
-rw-r--r--ui/qt/capture_filter_syntax_worker.cpp14
-rw-r--r--ui/qt/compiled_filter_output.cpp14
-rw-r--r--wsutil/Makefile.am3
-rw-r--r--wsutil/wspcap.h47
12 files changed, 71 insertions, 118 deletions
diff --git a/caputils/capture-pcap-util-unix.c b/caputils/capture-pcap-util-unix.c
index 5d57a02797..7f0df9ec9a 100644
--- a/caputils/capture-pcap-util-unix.c
+++ b/caputils/capture-pcap-util-unix.c
@@ -26,19 +26,7 @@
#ifdef HAVE_LIBPCAP
-#ifdef HAVE_PCAP_REMOTE
-/*
- * Force the WinPcap header files to define things required for remote
- * capture. (Yes, this is q WinPcap bug; if your project has a public
- * header file that checks or otherwise uses a #define that's defined
- * by your project's configuration process, and don't ensure that
- * it's always defined appropriately when that header file is included,
- * before its first use, you have made a mistake.)
- */
-#define HAVE_REMOTE
-#endif
-
-#include <pcap.h>
+#include <wsutil/wspcap.h>
#ifdef __APPLE__
#include <dlfcn.h>
diff --git a/caputils/capture-pcap-util.h b/caputils/capture-pcap-util.h
index 87a05e8283..22fb723cf8 100644
--- a/caputils/capture-pcap-util.h
+++ b/caputils/capture-pcap-util.h
@@ -29,19 +29,7 @@ extern "C" {
#ifdef HAVE_LIBPCAP
-#ifdef HAVE_PCAP_REMOTE
-/*
- * Force the WinPcap header files to define things required for remote
- * capture. (Yes, this is q WinPcap bug; if your project has a public
- * header file that checks or otherwise uses a #define that's defined
- * by your project's configuration process, and don't ensure that
- * it's always defined appropriately when that header file is included,
- * before its first use, you have made a mistake.)
- */
-#define HAVE_REMOTE
-#endif
-
-#include <pcap.h>
+#include <wsutil/wspcap.h>
#include "capture_opts.h"
diff --git a/caputils/capture_wpcap_packet.c b/caputils/capture_wpcap_packet.c
index 6d1b77cb11..eac5ca7c5d 100644
--- a/caputils/capture_wpcap_packet.c
+++ b/caputils/capture_wpcap_packet.c
@@ -30,19 +30,7 @@
#include <glib.h>
#include <gmodule.h>
-#ifdef HAVE_PCAP_REMOTE
-/*
- * Force the WinPcap header files to define things required for remote
- * capture. (Yes, this is q WinPcap bug; if your project has a public
- * header file that checks or otherwise uses a #define that's defined
- * by your project's configuration process, and don't ensure that
- * it's always defined appropriately when that header file is included,
- * before its first use, you have made a mistake.)
- */
-#define HAVE_REMOTE
-#endif
-
-#include <pcap.h>
+#include <wsutil/wspcap.h>
/* XXX - yes, I know, I should move cppmagic.h to a generic location. */
#include "tools/lemon/cppmagic.h"
diff --git a/extcap/androiddump.c b/extcap/androiddump.c
index 00cc0e03fb..d49ce0102b 100644
--- a/extcap/androiddump.c
+++ b/extcap/androiddump.c
@@ -65,19 +65,7 @@
#define PCAP_RECORD_HEADER_LENGTH 16
#ifdef ANDROIDDUMP_USE_LIBPCAP
- #ifdef HAVE_PCAP_REMOTE
- /*
- * Force the WinPcap header files to define things required for remote
- * capture. (Yes, this is q WinPcap bug; if your project has a public
- * header file that checks or otherwise uses a #define that's defined
- * by your project's configuration process, and don't ensure that
- * it's always defined appropriately when that header file is included,
- * before its first use, you have made a mistake.)
- */
- #define HAVE_REMOTE
- #endif
-
- #include <pcap.h>
+ #include <wsutil/wspcap.h>
#include <pcap-bpf.h>
#include <pcap/bluetooth.h>
diff --git a/ringbuffer.c b/ringbuffer.c
index 51a1a2ff6b..be8aff86e1 100644
--- a/ringbuffer.c
+++ b/ringbuffer.c
@@ -49,19 +49,7 @@
#include <time.h>
#include <errno.h>
-#ifdef HAVE_PCAP_REMOTE
-/*
- * Force the WinPcap header files to define things required for remote
- * capture. (Yes, this is q WinPcap bug; if your project has a public
- * header file that checks or otherwise uses a #define that's defined
- * by your project's configuration process, and don't ensure that
- * it's always defined appropriately when that header file is included,
- * before its first use, you have made a mistake.)
- */
-#define HAVE_REMOTE
-#endif
-
-#include <pcap.h>
+#include <wsutil/wspcap.h>
#include <glib.h>
diff --git a/tools/checkAPIs.pl b/tools/checkAPIs.pl
index 163347b423..22b9da4b13 100755
--- a/tools/checkAPIs.pl
+++ b/tools/checkAPIs.pl
@@ -1557,6 +1557,19 @@ sub check_included_files($$)
}
}
+ # only our wrapper file wsutils/wspcap.h may include pcap.h
+ # all other files should include the wrapper
+ if ($filename !~ /wspcap\.h/) {
+ foreach (@incFiles) {
+ if ( m#([<"]|/+)pcap\.h[>"]$# ) {
+ print STDERR "Warning: ".$filename.
+ " includes pcap.h directly. ".
+ "Include wsutil/wspcap.h instead.\n";
+ last;
+ }
+ }
+ }
+
# files in the ui/qt directory should include the ui class includes
# by using #include <>
# this ensures that Visual Studio picks up these files from the
diff --git a/trigcap.c b/trigcap.c
index 3c14c6a37e..0d7cf9ea34 100644
--- a/trigcap.c
+++ b/trigcap.c
@@ -28,19 +28,7 @@
#include <errno.h>
#include <getopt.h>
-#ifdef HAVE_PCAP_REMOTE
-/*
- * Force the WinPcap header files to define things required for remote
- * capture. (Yes, this is q WinPcap bug; if your project has a public
- * header file that checks or otherwise uses a #define that's defined
- * by your project's configuration process, and don't ensure that
- * it's always defined appropriately when that header file is included,
- * before its first use, you have made a mistake.)
- */
-#define HAVE_REMOTE
-#endif
-
-#include <pcap.h>
+#include <wsutil/wspcap.h>
static int dumping;
static volatile int keep_going;
diff --git a/ui/gtk/airpcap_dlg.c b/ui/gtk/airpcap_dlg.c
index b02034c2db..1dc52436f2 100644
--- a/ui/gtk/airpcap_dlg.c
+++ b/ui/gtk/airpcap_dlg.c
@@ -35,19 +35,7 @@
#include <epan/prefs.h>
#include <epan/crypt/wep-wpadefs.h>
-#ifdef HAVE_PCAP_REMOTE
-/*
- * Force the WinPcap header files to define things required for remote
- * capture. (Yes, this is q WinPcap bug; if your project has a public
- * header file that checks or otherwise uses a #define that's defined
- * by your project's configuration process, and don't ensure that
- * it's always defined appropriately when that header file is included,
- * before its first use, you have made a mistake.)
- */
-#define HAVE_REMOTE
-#endif
-
-#include <pcap.h>
+#include <wsutil/wspcap.h>
#include "ui/simple_dialog.h"
diff --git a/ui/qt/capture_filter_syntax_worker.cpp b/ui/qt/capture_filter_syntax_worker.cpp
index a296f89c51..dc3edbfe0c 100644
--- a/ui/qt/capture_filter_syntax_worker.cpp
+++ b/ui/qt/capture_filter_syntax_worker.cpp
@@ -24,19 +24,7 @@
#ifdef HAVE_LIBPCAP
#include <glib.h>
-#ifdef HAVE_PCAP_REMOTE
-/*
- * Force the WinPcap header files to define things required for remote
- * capture. (Yes, this is q WinPcap bug; if your project has a public
- * header file that checks or otherwise uses a #define that's defined
- * by your project's configuration process, and don't ensure that
- * it's always defined appropriately when that header file is included,
- * before its first use, you have made a mistake.)
- */
-#define HAVE_REMOTE
-#endif
-
-#include <pcap.h>
+#include <wsutil/wspcap.h>
#include "capture_opts.h"
#include "ui/capture_globals.h"
diff --git a/ui/qt/compiled_filter_output.cpp b/ui/qt/compiled_filter_output.cpp
index c78ab713ac..a234123b62 100644
--- a/ui/qt/compiled_filter_output.cpp
+++ b/ui/qt/compiled_filter_output.cpp
@@ -23,19 +23,7 @@
#include <ui_compiled_filter_output.h>
#include "compiled_filter_output.h"
-#ifdef HAVE_PCAP_REMOTE
-/*
- * Force the WinPcap header files to define things required for remote
- * capture. (Yes, this is q WinPcap bug; if your project has a public
- * header file that checks or otherwise uses a #define that's defined
- * by your project's configuration process, and don't ensure that
- * it's always defined appropriately when that header file is included,
- * before its first use, you have made a mistake.)
- */
-#define HAVE_REMOTE
-#endif
-
-#include <pcap.h>
+#include <wsutil/wspcap.h>
#include "capture_opts.h"
#include <wiretap/wtap.h>
diff --git a/wsutil/Makefile.am b/wsutil/Makefile.am
index 680cf0ea75..a92982d61a 100644
--- a/wsutil/Makefile.am
+++ b/wsutil/Makefile.am
@@ -200,7 +200,8 @@ EXTRA_DIST = \
win32-utils.h \
ws_mempbrk_sse42.c \
wsgcrypt.h \
- wsgetopt.h
+ wsgetopt.h \
+ wspcap.h
CLEANFILES = \
libwsutil.a \
diff --git a/wsutil/wspcap.h b/wsutil/wspcap.h
new file mode 100644
index 0000000000..f6bb0dd71a
--- /dev/null
+++ b/wsutil/wspcap.h
@@ -0,0 +1,47 @@
+/* wspcap.h
+ *
+ * Wrapper around libpcap/WinPcap's pcap.h.
+ *
+ * If HAVE_PCAP_REMOTE is defined, it force the WinPcap header files to
+ * define things required for remote capture.
+ *
+ * Yes, this is q WinPcap bug; if your project has a public header file
+ * that checks or otherwise uses a #define that's defined by your project's
+ * configuration process, and don't ensure that it's always defined
+ * appropriately when that header file is included, before its first use,
+ * you have made a mistake.
+ *
+ * This bug is fixed in the master branch of libpcap, so any libpcap
+ * release with remote capture support will not have this problem, and
+ * any future WinPcap/NPcap release based on current libpcap code will
+ * not have this problem.
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 2007 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef __WSPCAP_H__
+#define __WSPCAP_H__
+
+#ifdef HAVE_PCAP_REMOTE
+#define HAVE_REMOTE
+#endif
+
+#include <pcap.h>
+
+#endif /* __WSPCAP_H__ */