Remove wspcap.h and use config.h instead

Forcing the use of a dedicated header to replace pcap.h is
unnecessary code and mental overhead in this case. We can
use config.h instead for the same purpose of defining a
macro symbol before including pcap.h.
This commit is contained in:
João Valverde 2023-02-06 11:04:13 +00:00
parent ab0d190450
commit 71cfbd81b3
10 changed files with 56 additions and 85 deletions

View File

@ -18,7 +18,7 @@
#ifdef HAVE_LIBPCAP
#include "wspcap.h"
#include <pcap.h>
#ifdef HAVE_LIBCAP
# include <sys/capability.h>

View File

@ -16,7 +16,7 @@
#ifdef HAVE_LIBPCAP
#include "wspcap.h"
#include <pcap.h>
#include "capture_opts.h"

View File

@ -346,6 +346,55 @@
#define PCRE2_CODE_UNIT_WIDTH 8
#endif
/*
* If HAVE_PCAP_REMOTE is defined, it forces the WinPcap header files to
* define things required for remote capture, by defining HAVE_REMOTE.
*
* With all versions of the WinPcap SDK, if:
*
* 1) you are building with any current WinPcap SDK;
* 2) you do not define HAVE_REMOTE before including pcap.h (or
* pcap/pcap.h);
* 3) you define a struct pcap_stat and pass it to a call to
* pcap_stats();
* 4) the system you're running on has WinPcap, rather than Npcap,
* installed;
*
* whatever is in memory after the struct pcap_stat may get overwritten,
* with unpredictable results, because the pcap_stats() implementation for
* WinPcap will assume that the structure has the additional members that
* are added if and only if HAVE_REMOTE is defined, and will fill them in,
* even if they're not there.
*
* 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.
*
* In libpcap 1.7.0 and later, the pcap_stats() implementation for WinPcap
* will not fill those fields in; however, no WinPcap implementation was
* based on that recent a libpcap release, so they all have the bug.
*
* Npcap was originally based on libpcap 1.8.0, and later releases are
* based on later releases of libpcap, so they will not overwrite memory
* past the end of the structure.
*
* The header file bug is fixed in libpcap 1.9.0 or later - the fields
* are present on Windows, regardless of whether HAVE_REMOTE is defined
* or not when the header is included (and are not present on UN*X), so
* if you build with an SDK with libpcap 1.9.0 or later headers, you
* do not need to define HAVE_REMOTE before including pcap.h (including it
* will make no difference).
*
* No version of the WinPcap SDK provided libpcap 1.9.0-or-later headers.
* The Npcap SDK, as of SDK version 1.04, provides them, so this is
* only necessary for building with the WinPcap SDK.
*/
#ifdef HAVE_PCAP_REMOTE
#define HAVE_REMOTE
#endif
#include <ws_log_defs.h>
#endif /* __CONFIG_H__ */

View File

@ -58,7 +58,7 @@
#define PCAP_RECORD_HEADER_LENGTH 16
#ifdef ANDROIDDUMP_USE_LIBPCAP
#include "wspcap.h"
#include <pcap.h>
#include <pcap-bpf.h>
#include <pcap/bluetooth.h>

View File

@ -39,7 +39,7 @@
#include <stdlib.h>
#include <glib.h>
#include "wspcap.h"
#include <pcap.h>
#include <glib.h>

View File

@ -547,19 +547,6 @@ sub check_included_files($$)
}
}
# only our wrapper file 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 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

View File

@ -15,7 +15,7 @@
#include <errno.h>
#include <glib.h>
#include "wspcap.h"
#include <pcap.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>

View File

@ -12,7 +12,7 @@
#ifdef HAVE_LIBPCAP
#include <glib.h>
#include "wspcap.h"
#include <pcap.h>
#include "capture_opts.h"
#include "ui/capture_globals.h"

View File

@ -13,7 +13,7 @@
#include "compiled_filter_output.h"
#ifdef HAVE_LIBPCAP
#include "wspcap.h"
#include <pcap.h>
#endif
#include "capture_opts.h"

View File

@ -1,65 +0,0 @@
/** @file
*
* Wrapper around libpcap/WinPcap's pcap.h.
*
* If HAVE_PCAP_REMOTE is defined, it forces the WinPcap header files to
* define things required for remote capture, by defining HAVE_REMOTE.
*
* With all versions of the WinPcap SDK, if:
*
* 1) you are building with any current WinPcap SDK;
* 2) you do not define HAVE_REMOTE before including pcap.h (or
* pcap/pcap.h);
* 3) you define a struct pcap_stat and pass it to a call to
* pcap_stats();
* 4) the system you're running on has WinPcap, rather than Npcap,
* installed;
*
* whatever is in memory after the struct pcap_stat may get overwritten,
* with unpredictable results, because the pcap_stats() implementation for
* WinPcap will assume that the structure has the additional members that
* are added if and only if HAVE_REMOTE is defined, and will fill them in,
* even if they're not there.
*
* 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.
*
* In libpcap 1.7.0 and later, the pcap_stats() implementation for WinPcap
* will not fill those fields in; however, no WinPcap implementation was
* based on that recent a libpcap release, so they all have the bug.
*
* Npcap was originally based on libpcap 1.8.0, and later releases are
* based on later releases of libpcap, so they will not overwrite memory
* past the end of the structure.
*
* The header file bug is fixed in libpcap 1.9.0 or later - the fields
* are present on Windows, regardless of whether HAVE_REMOTE is defined
* or not when the header is included (and are not present on UN*X), so
* if you build with an SDK with libpcap 1.9.0 or later headers, you
* do not need to define HAVE_REMOTE before including pcap.h (including it
* will make no difference).
*
* No version of the WinPcap SDK provided libpcap 1.9.0-or-later headers.
* The Npcap SDK, as of SDK version 1.04, provides them, so this is
* only necessary for building with the WinPcap SDK.
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 2007 Gerald Combs
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef __WSPCAP_H__
#define __WSPCAP_H__
#ifdef HAVE_PCAP_REMOTE
#define HAVE_REMOTE
#endif
#include <pcap.h>
#endif /* __WSPCAP_H__ */