summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuy Harris <gharris@sonic.net>2022-01-01 22:56:18 -0800
committerGuy Harris <gharris@sonic.net>2022-01-01 22:56:18 -0800
commitea1928b35bddea69b8843161f2f8dbff54c0d74e (patch)
tree368dfc687bfe0f043c01bceab34016daab112955
parent95c0e2648512ac6378df3b2e3888ca9433ab352f (diff)
downloadlibpcap-ea1928b35bddea69b8843161f2f8dbff54c0d74e.tar.gz
Have a separate DIAG_OFF_ for pointer-to-integer narrowing.
Use that for pcap_fileno() on Windows; that API shouldn't exist on Windows, and should never be used, but WinPcap offered it, so we're stuck with it. At least try to prevent compilation errors when libpcap is built. This should fix the warnings for pcap_fileno() in GitHub issue #1026.
-rw-r--r--diag-control.h44
-rw-r--r--pcap.c4
2 files changed, 45 insertions, 3 deletions
diff --git a/diag-control.h b/diag-control.h
index d1622aa6..7a2f787a 100644
--- a/diag-control.h
+++ b/diag-control.h
@@ -114,6 +114,19 @@
__pragma(warning(pop))
/*
+ * Suppress pointer-to-integer conversion warnins.
+ * (This should never be done, but we have an API
+ * that's a documented WinPcap API, so we're stuck
+ * with supporting it, even though nobody should
+ * use it.)
+ */
+ #define DIAG_OFF_PTR_TO_INT \
+ __pragma(warning(push)) \
+ __pragma(warning(disable:4311))
+ #define DIAG_ON_PTR_TOINT \
+ __pragma(warning(pop))
+
+ /*
* Suppress deprecation warnings.
*/
#define DIAG_OFF_DEPRECATION \
@@ -150,11 +163,24 @@
#define DIAG_OFF_NARROWING \
PCAP_DO_PRAGMA(clang diagnostic push) \
PCAP_DO_PRAGMA(clang diagnostic ignored "-Wshorten-64-to-32")
-
#define DIAG_ON_NARROWING \
PCAP_DO_PRAGMA(clang diagnostic pop)
/*
+ * Suppress pointer-to-integer conversion warnins.
+ * (This should never be done, but we have an API
+ * that's a documented WinPcap API, so we're stuck
+ * with supporting it, even though nobody should
+ * use it. And, yes, somebody might compile for
+ * Windows using a Clang-based compiler.)
+ */
+ #define DIAG_OFF_PTR_TO_INT \
+ PCAP_DO_PRAGMA(clang diagnostic push) \
+ PCAP_DO_PRAGMA(clang diagnostic ignored "-Wpointer-to-int-cast")
+ #define DIAG_ON_PTR_TO_INT \
+ PCAP_DO_PRAGMA(clang diagnostic pop)
+
+ /*
* Suppress deprecation warnings.
*/
#define DIAG_OFF_DEPRECATION \
@@ -185,6 +211,20 @@
#define DIAG_ON_NARROWING
/*
+ * Suppress pointer-to-integer conversion warnins.
+ * (This should never be done, but we have an API
+ * that's a documented WinPcap API, so we're stuck
+ * with supporting it, even though nobody should
+ * use it. And, yes, somebody might compile for
+ * Windows using GCC.)
+ */
+ #define DIAG_OFF_PTR_TO_INT \
+ PCAP_DO_PRAGMA(GCC diagnostic push) \
+ PCAP_DO_PRAGMA(GCC diagnostic ignored "-Wpointer-to-int-cast")
+ #define DIAG_ON_PTR_TO_INT \
+ PCAP_DO_PRAGMA(GCC diagnostic pop)
+
+ /*
* Suppress deprecation warnings.
*/
#define DIAG_OFF_DEPRECATION \
@@ -218,6 +258,8 @@
#define DIAG_ON_FLEX
#define DIAG_OFF_NARROWING
#define DIAG_ON_NARROWING
+ #define DIAG_OFF_PTR_TO_INT
+ #define DIAG_ON_PTR_TO_INT
#define DIAG_OFF_DEPRECATION
#define DIAG_ON_DEPRECATION
#define DIAG_OFF_FORMAT_TRUNCATION
diff --git a/pcap.c b/pcap.c
index 201bba22..2561b7d7 100644
--- a/pcap.c
+++ b/pcap.c
@@ -3484,9 +3484,9 @@ pcap_fileno(pcap_t *p)
* routine (and be prepared for it to return
* INVALID_HANDLE_VALUE).
*/
-DIAG_OFF_NARROWING
+DIAG_OFF_PTR_TO_INT
return ((int)(DWORD)p->handle);
-DIAG_ON_NARROWING
+DIAG_ON_PTR_TO_INT
} else
return (PCAP_ERROR);
}