X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/1ed63b5d0630a4b5b4a8d31174d9f3e95a970913..HEAD:/netdissect-stdinc.h?ds=sidebyside diff --git a/netdissect-stdinc.h b/netdissect-stdinc.h index aed38b31..15c3e284 100644 --- a/netdissect-stdinc.h +++ b/netdissect-stdinc.h @@ -39,6 +39,8 @@ #ifndef netdissect_stdinc_h #define netdissect_stdinc_h +#include "ftmacros.h" + #include #include "compiler-tests.h" @@ -46,6 +48,9 @@ #include "varattrs.h" /* + * If we're compiling with Visual Studio, make sure we have at least + * VS 2015 or later, so we have sufficient C99 support. + * * XXX - verify that we have at least C99 support on UN*Xes? * * What about MinGW or various DOS toolchains? We're currently assuming @@ -80,6 +85,9 @@ */ /* + * Include to get the integer types and PRi[doux]64 values + * defined. + * * If the compiler is MSVC, we require VS 2015 or newer, so we * have - and support for %zu in the formatted * printing functions. @@ -100,58 +108,12 @@ /* * Suppress definition of intN_t in bittypes.h, which might be included * by in older versions of WinPcap. - * (Yes, HAVE_U_INTn_T, as the definition guards are UN*X-oriented, and - * we check for u_intN_t in the UN*X configure script.) + * (Yes, HAVE_U_INTn_T, as the definition guards are UN*X-oriented.) */ #define HAVE_U_INT8_T #define HAVE_U_INT16_T #define HAVE_U_INT32_T #define HAVE_U_INT64_T - - /* - * These may be defined by . If not, define them - * ourselves. - * - * XXX - given the assumptions above, will they ever *not* be - * defined by ? - * - * XXX - for MSVC, we always want the _MSC_EXTENSIONS versions. - * What about other compilers? If, as the MinGW Web site says MinGW - * does, the other compilers just use Microsoft's run-time library, - * then they should probably use the _MSC_EXTENSIONS even if the - * compiler doesn't define _MSC_EXTENSIONS. - */ - #ifndef PRId64 - #ifdef _MSC_EXTENSIONS - #define PRId64 "I64d" - #else - #define PRId64 "lld" - #endif - #endif /* PRId64 */ - - #ifndef PRIo64 - #ifdef _MSC_EXTENSIONS - #define PRIo64 "I64o" - #else - #define PRIo64 "llo" - #endif - #endif /* PRIo64 */ - - #ifndef PRIx64 - #ifdef _MSC_EXTENSIONS - #define PRIx64 "I64x" - #else - #define PRIx64 "llx" - #endif - #endif - - #ifndef PRIu64 - #ifdef _MSC_EXTENSIONS - #define PRIu64 "I64u" - #else - #define PRIu64 "llu" - #endif - #endif #endif #endif /* HAVE_PCAP_PCAP_INTTYPES_H */ @@ -164,7 +126,6 @@ #include #include #include -#include #include #include #include @@ -178,11 +139,6 @@ * strtoint64_t(). */ #define strtoint64_t strtoll - - /* - * And we have LL as a suffix for constants, so use that. - */ - #define INT64_T_CONSTANT(constant) (constant##LL) #else /* * Non-Microsoft compiler. @@ -190,11 +146,6 @@ * XXX - should we use strtoll or should we use _strtoi64()? */ #define strtoint64_t strtoll - - /* - * Assume LL works. - */ - #define INT64_T_CONSTANT(constant) (constant##LL) #endif #ifdef _MSC_VER @@ -203,16 +154,20 @@ * by adding a preceding underscore; we *want* the UN*Xisms, so add * #defines to let us use them. */ - #define isascii __isascii #define isatty _isatty #define stat _stat - #define strdup _strdup #define open _open - #define fstat _fstat #define read _read #define close _close #define O_RDONLY _O_RDONLY + /* + * We define our_fstat64 as _fstati64, and define our_statb as + * struct _stati64, so we get 64-bit file sizes. + */ + #define our_fstat _fstati64 + #define our_statb struct _stati64 + /* * If has been included, and _DEBUG is defined, and * __STDC__ is zero, will define strdup() to call @@ -236,10 +191,6 @@ #define inline __inline #endif -#if defined(AF_INET6) && !defined(HAVE_OS_IPV6_SUPPORT) -#define HAVE_OS_IPV6_SUPPORT -#endif - #ifndef INET6_ADDRSTRLEN #define INET6_ADDRSTRLEN 46 #endif @@ -251,7 +202,7 @@ #endif #ifndef caddr_t -typedef char* caddr_t; +typedef char *caddr_t; #endif /* caddr_t */ #define MAXHOSTNAMELEN 64 @@ -262,7 +213,6 @@ typedef char* caddr_t; * Includes and definitions for various flavors of UN*X. */ -#include #include #include #include @@ -276,15 +226,16 @@ typedef char* caddr_t; #include /* - * Assume all UN*Xes have strtoll(), and use it for strtoint64_t(). + * We should have large file support enabled, if it's available, + * so just use fstat as our_fstat and struct stat as our_statb. */ -#define strtoint64_t strtoll +#define our_fstat fstat +#define our_statb struct stat /* - * Assume LL works. + * Assume all UN*Xes have strtoll(), and use it for strtoint64_t(). */ -#define INT64_T_CONSTANT(constant) (constant##LL) - +#define strtoint64_t strtoll #endif /* _WIN32 */ /* @@ -348,28 +299,6 @@ typedef char* caddr_t; } #endif -/* - * If the OS doesn't define AF_INET6 and struct in6_addr: - * - * define AF_INET6, so we can use it internally as a "this is an - * IPv6 address" indication; - * - * define struct in6_addr so that we can use it for IPv6 addresses. - */ -#ifndef HAVE_OS_IPV6_SUPPORT -#ifndef AF_INET6 -#define AF_INET6 24 - -struct in6_addr { - union { - __uint8_t __u6_addr8[16]; - __uint16_t __u6_addr16[8]; - __uint32_t __u6_addr32[4]; - } __u6_addr; /* 128-bit IP6 address */ -}; -#endif -#endif - #ifndef NI_MAXHOST #define NI_MAXHOST 1025 #endif @@ -386,70 +315,6 @@ struct in6_addr { #define FALSE 0 #endif -/* - * The Apple deprecation workaround macros below were adopted from the - * FreeRADIUS server code under permission of Alan DeKok and Arran Cudbard-Bell. - */ - -#define XSTRINGIFY(x) #x - -/* - * Macros for controlling warnings in GCC >= 4.2 and clang >= 2.8 - */ -#define DIAG_JOINSTR(x,y) XSTRINGIFY(x ## y) -#define DIAG_DO_PRAGMA(x) _Pragma (#x) - -/* - * The current clang compilers also define __GNUC__ and __GNUC_MINOR__ - * thus we need to test the clang case before the GCC one - */ -#if defined(__clang__) -# if (__clang_major__ * 100) + __clang_minor__ >= 208 -# define DIAG_PRAGMA(x) DIAG_DO_PRAGMA(clang diagnostic x) -# define DIAG_OFF(x) DIAG_PRAGMA(push) DIAG_PRAGMA(ignored DIAG_JOINSTR(-W,x)) -# define DIAG_ON(x) DIAG_PRAGMA(pop) -# else -# define DIAG_OFF(x) -# define DIAG_ON(x) -# endif -#elif defined(__GNUC__) && ((__GNUC__ * 100) + __GNUC_MINOR__) >= 402 -# define DIAG_PRAGMA(x) DIAG_DO_PRAGMA(GCC diagnostic x) -# if ((__GNUC__ * 100) + __GNUC_MINOR__) >= 406 -# define DIAG_OFF(x) DIAG_PRAGMA(push) DIAG_PRAGMA(ignored DIAG_JOINSTR(-W,x)) -# define DIAG_ON(x) DIAG_PRAGMA(pop) -# else -# define DIAG_OFF(x) DIAG_PRAGMA(ignored DIAG_JOINSTR(-W,x)) -# define DIAG_ON(x) DIAG_PRAGMA(warning DIAG_JOINSTR(-W,x)) -# endif -#else -# define DIAG_OFF(x) -# define DIAG_ON(x) -#endif - -/* Use for clang specific warnings */ -#ifdef __clang__ -# define DIAG_OFF_CLANG(x) DIAG_OFF(x) -# define DIAG_ON_CLANG(x) DIAG_ON(x) -#else -# define DIAG_OFF_CLANG(x) -# define DIAG_ON_CLANG(x) -#endif - -/* - * For dealing with APIs which are only deprecated in OSX (like the OpenSSL API) - */ -#ifdef __APPLE__ -# define USES_APPLE_DEPRECATED_API DIAG_OFF(deprecated-declarations) -# define USES_APPLE_RST DIAG_ON(deprecated-declarations) -#else -# define USES_APPLE_DEPRECATED_API -# define USES_APPLE_RST -#endif - -/* - * end of Apple deprecation workaround macros - */ - /* * Statement attributes, for various compilers. *