/ports/winnt/include/config.h
https://gitlab.com/devicenull/ntpsec · C Header · 528 lines · 273 code · 76 blank · 179 comment · 6 complexity · 610e11f8c2db5984ad1dbabff9d795b1 MD5 · raw file
- /*
- * ports/winnt/include/config.h - static Windows config.h
- *
- * On most systems config.h is generated by the configure script.
- * For the Windows port, it's hand-maintained. Compilers earlier
- * than Visual C++ 2005 are no longer supported, enabling
- * portable use of "long long" and "%lld".
- */
- #ifndef CONFIG_H
- #define CONFIG_H
- /*
- * Known predifined MS compiler version codes:
- * 1800: MSVC++ 12.0 (Visual Studio 2013)
- * 1700: MSVC++ 11.0 (Visual Studio 2012)
- * 1600: MSVC++ 10.0 (Visual Studio 2010)
- * 1500: MSVC++ 9.0 (Visual Studio 2008)
- * 1400: MSVC++ 8.0 (Visual Studio 2005)
- * 1310: MSVC++ 7.1 (Visual Studio 2003)
- * 1300: MSVC++ 7.0
- * 1200: MSVC++ 6.0 (Visual C++ 6)
- * 1100: MSVC++ 5.0
- */
- #if defined(_MSC_VER) && _MSC_VER < 1400
- #error Minimum supported Microsoft compiler is Visual C++ 2005.
- #endif
- /*
- * We want structures and prototypes added after Windows NT 4.0 exposed
- * by Windows header files, so we define _WIN32_WINNT to target Windows
- * XP (version 5.1). By default, _WIN32_WINNT also controls the minimum
- * required Windows version to launch the .exe. As we want a single
- * binary to work on all supported Windows versions, we runtime link
- * newer functions, and use the linker /version:0x0400 option to
- * override the .EXE header minimum Windows version.
- *
- * When using the VC++ 2008 and later compilers, the resulting binaries
- * will not work on versions earlier than Windows XP, due to runtime
- * library dependencies. That is, Visual C++ 2005 is the last version
- * capable of producing binaries usable with Windows NT 4 and 2000.
- */
- #ifndef _WIN32_WINNT
- #define _WIN32_WINNT 0x0501
- #endif
- #define __attribute__(x) /* empty */
- #define _CRT_SECURE_NO_DEPRECATE 1
- /*
- * ANSI C compliance enabled
- */
- #define __STDC__ 1
- /*
- * Enable the debug build of MS C runtime to dump leaks
- * at exit time (currently only if run under a debugger).
- */
- #if defined(_MSC_VER) && defined(_DEBUG)
- # define _CRTDBG_MAP_ALLOC
- # include <stdlib.h>
- # include <crtdbg.h>
- /* # define MALLOC_LINT */ /* defers free() */
- # define EREALLOC_IMPL(ptr, newsz, filenm, loc) \
- _realloc_dbg(ptr, newsz, _NORMAL_BLOCK, filenm, loc)
- #endif
- /*
- * We need to include stdio.h first before we #define snprintf
- * otherwise we can get errors during the build
- */
- #include <stdio.h>
- /* Prevent inclusion of winsock.h in windows.h */
- #ifndef _WINSOCKAPI_
- #define _WINSOCKAPI_
- #endif
- #ifndef __RPCASYNC_H__
- #define __RPCASYNC_H__
- #endif
- /*
- * On Unix struct sock_timeval is equivalent to struct timeval.
- * On Windows built with 64-bit time_t, sock_timeval.tv_sec is a long
- * as required by Windows' socket() interface timeout argument, while
- * timeval.tv_sec is time_t for the more common use as a UTC time
- * within NTP.
- *
- * winsock.h unconditionally defines struct timeval with long tv_sec
- * instead of time_t tv_sec. We redirect its declaration to struct
- * sock_timeval instead of struct timeval with a #define.
- */
- #define timeval sock_timeval
- /* Include Windows headers */
- #include <windows.h>
- #include <winsock2.h>
- #include <ws2tcpip.h>
- #undef timeval /* see sock_timeval #define and comment above */
- /*
- * Some definitions we are using are missing in the headers
- * shipping with VC6. However, if the SDK is installed then the
- * SDK's headers may declare the missing types. This is at least
- * the case in the Oct 2001 SDK. That SDK and all subsequent
- * versions also define the symbol _W64, so we can use that one
- * to determine whether some types need to be defined, or not.
- */
- #ifdef _W64
- /* VC6 can include wspiapi.h only if the SDK is installed */
- #include <wspiapi.h>
- #endif
- #undef interface
- #include <process.h>
- #include <time.h> /* time_t for timeval decl */
- #include <io.h>
- /* ---------------------------------------------------------------------
- * Above this line are #include lines and the few #define lines
- * needed before including headers.
- */
- struct timeval {
- time_t tv_sec;
- long tv_usec;
- };
- /*
- * ntohl and friends are actual functions on Windows, use our own
- * macros instead to save the function call overhead. All releases
- * of Windows are little-endian.
- */
- #ifdef ntohl
- #error ntohl is already defined in ports/winnt/include/config.h
- #else
- #define ntohl(ul) (((u_long)(ul) & 0xff) << 24 | \
- ((u_long)(ul) & 0xff00) << 8 | \
- ((u_long)(ul) & 0xff0000) >> 8 | \
- ((u_long)(ul) & 0xff000000) >> 24)
- #define htonl(ul) ntohl(ul)
- #define ntohs(us) ((u_short) \
- (((u_short)(us) & 0xff) << 8 | \
- ((u_short)(us) & 0xff00) >> 8))
- #define htons(us) ntohs(us)
- #endif
- /*
- * On Unix open() works for tty (serial) devices just fine, while on
- * Windows refclock serial devices are opened using CreateFile, a lower
- * level than the CRT-provided descriptors, because the C runtime lacks
- * tty APIs. For refclocks which wish to use open() as well as or
- * instead of refclock_open(), tty_open() is equivalent to open() on
- * Unix and implemented in the Windows port similarly to
- * refclock_open().
- */
- extern int tty_open(char *, int, int);
- /*
- * disable use of __declspec(dllexport) by libisc routines
- */
- #define ISC_STATIC_WIN 1
- /*
- * ntp_rfc2553.h has cruft under #ifdef SYS_WINNT which is
- * appropriate for older Microsoft IPv6 definitions, such
- * as in_addr6 being the struct type. We can differentiate
- * the RFC2553-compliant newer headers because they have
- * #define in_addr6 in6_addr
- * for backward compatibility. With the newer headers,
- * we define ISC_PLATFORM_0HAVEIPV6 and disable the cruft.
- */
- #ifdef in_addr6
- #define ENABLE_IPV6
- #define ISC_PLATFORM_HAVEIPV6
- #define ISC_PLATFORM_HAVESCOPEID
- #define HAVE_STRUCT_SOCKADDR_STORAGE
- #define ISC_PLATFORM_HAVEIN6PKTINFO
- #endif /* in_addr6 / RFC2553-compliant IPv6 headers */
- #define NO_OPTION_NAME_WARNINGS
- #if !defined( _W64 )
- /*
- * if ULONG_PTR needs to be defined then the build environment
- * is pure 32 bit Windows. Since ULONG_PTR and DWORD have
- * the same size in 32 bit Windows we can safely define
- * a replacement.
- */
- typedef DWORD ULONG_PTR;
- /* VC6 doesn't know about socklen_t, except if the SDK is installed */
- typedef int socklen_t;
- #endif /* _W64 */
- #define ISC_PLATFORM_NEEDIN6ADDRANY
- #define HAVE_SOCKADDR_IN6
- /*
- * The type of the socklen_t defined for getnameinfo() and getaddrinfo()
- * is int for VS compilers on Windows but the type is already declared
- */
- #define GETSOCKNAME_SOCKLEN_TYPE socklen_t
- /*
- * Older SDKs do not define SO_EXCLUSIVEADDRUSE in winsock2.h
- */
- #ifndef SO_EXCLUSIVEADDRUSE
- #define SO_EXCLUSIVEADDRUSE ((int)(~SO_REUSEADDR))
- #endif
- #if defined _MSC_VER && _MSC_VER < 1400
- /*
- * Use 32-bit time definitions for versions prior to VS 2005
- * VS 2005 defaults to 64-bit time
- */
- # define SIZEOF_TIME_T 4
- #else
- # define SIZEOF_TIME_T 8
- #endif
- /*
- * An attempt to cut down the number of warnings generated during compilation.
- * All of these should be benign to disable.
- */
- #pragma warning(disable: 4100) /* unreferenced formal parameter */
- #pragma warning(disable: 4127) /* conditional expression is constant */
- #pragma warning(disable: 4996) /* more secure replacement available */
- /*
- * Windows NT Configuration Values
- */
- #if defined _DEBUG /* Use VC standard macro definitions */
- # define DEBUG 1
- #endif
- #define __windows__ 1
- /* Define if you have the ANSI C header files. */
- #define STDC_HEADERS 1
- #define OPEN_BCAST_SOCKET 1 /* for ntp_io.c */
- #define TYPEOF_IP_MULTICAST_LOOP BOOL
- #define SETSOCKOPT_ARG_CAST (const char *)
- #define HAVE_RANDOM
- #define SAVECONFIG 1
- /*
- * Multimedia timer enable
- */
- #define USE_MM_TIMER
- /* check for OpenSSL */
- #ifdef HAVE_OPENSSL
- # define USE_OPENSSL_CRYPTO_RAND 1
- #endif
- extern void arc4random_buf(void *buf, size_t nbytes);
- /*
- * Keywords and functions that Microsoft maps
- * to other names
- */
- #define inline __inline
- #define stricmp _stricmp
- #define strcasecmp _stricmp
- #define isascii __isascii
- #define finite _finite
- #define random rand
- #define srandom srand
- #define fdopen _fdopen
- #define read _read
- #define open _open
- #ifndef close
- #define close _close
- #endif
- #define write _write
- #define strdup _strdup
- #define alloca _alloca
- #define stat _stat /*struct stat from <sys/stat.h> */
- #define fstat _fstat
- #define unlink _unlink
- /*
- * punt on fchmod on Windows
- */
- #define fchmod(x,y) {}
- #define lseek _lseek
- #define pipe _pipe
- #define dup2 _dup2
- /*
- * scale, unix sleep is seconds, Windows Sleep is msec
- */
- #define sleep(x) Sleep((unsigned)(x) * 1000)
- #define fileno _fileno
- #define isatty _isatty
- #define mktemp _mktemp
- #define getpid _getpid
- #define timegm _mkgmtime
- #define errno_to_str isc__strerror
- /*
- * symbol returning the name of the current function
- */
- #define __func__ __FUNCTION__
- typedef int pid_t; /* PID is an int */
- typedef int ssize_t; /* ssize is an int */
- /*
- * Map the stream to the file number
- */
- #define STDOUT_FILENO _fileno(stdout)
- #define STDERR_FILENO _fileno(stderr)
- /*
- * To minimize Windows-specific changes to the rest of the NTP code,
- * particularly reference clocks, ntp_stdlib.h will
- *
- * #define strerror(e) ntp_strerror(e)
- *
- * to deal with our mixture of C runtime (open, write) and Windows
- * (sockets, serial ports) error codes. This is an ugly hack because
- * both use the lowest values differently, but particularly for ntpd,
- * it's not a problem.
- */
- #define strerror(e) ntp_strerror(e)
- extern char * ntp_strerror (int e);
- #define MCAST /* Enable Multicast Support */
- #define MULTICAST_NONEWSOCKET /* Don't create a new socket for mcast address */
- # define REFCLOCK /* from ntpd.mak */
- /* #define CLOCK_PARSE */
- #define CLOCK_ACTS
- #define CLOCK_ARBITER
- #define CLOCK_ARCRON_MSF
- #define OWN_PPS_NTP_TIMESTAMP_FROM_COUNTER /* timepps.h */
- #define HAVE_TIMEPPS_H
- #define HAVE_PPSAPI
- #define CLOCK_ATOM
- #define CLOCK_CHU
- #define CLOCK_CHRONOLOG
- #define CLOCK_DUMBCLOCK
- #define CLOCK_HOPF_SERIAL /* device 38, hopf DCF77/GPS serial line receiver */
- #define CLOCK_HOPF_PCI /* device 39, hopf DCF77/GPS PCI-Bus receiver */
- #define CLOCK_JUPITER
- #define CLOCK_LOCAL
- #define CLOCK_NMEA
- #define CLOCK_ONCORE
- #define CLOCK_PALISADE /* from ntpd.mak */
- #define CLOCK_PARSE
- /* parse component drivers */
- #define CLOCK_COMPUTIME
- #define CLOCK_DCF7000
- #define CLOCK_HOPF6021
- #define CLOCK_MEINBERG
- #define CLOCK_RAWDCF
- #define CLOCK_RCC8000
- #define CLOCK_SCHMID
- #define CLOCK_TRIMTAIP
- #define CLOCK_TRIMTSIP
- #define CLOCK_VARITEXT
- #define CLOCK_WHARTON_400A
- /* end parse component drivers */
- /* # define CLOCK_SHM */
- #define CLOCK_SPECTRACOM /* refclock_spectracom.c */
- #define CLOCK_TRIMBLEDC
- #define CLOCK_TRUETIME
- #define NTP_LITTLE_ENDIAN /* from libntp.mak */
- #define NTP_POSIX_SOURCE
- #define SYSLOG_FILE /* from libntp.mak */
- #define HAVE_LONG_LONG_INT 1
- #define HAVE_UNSIGNED_LONG_LONG_INT 1
- #define HAVE_SIZE_T 1
- #define HAVE_PTRDIFF_T 1
- # define SIZEOF_SIGNED_CHAR 1
- # define SIZEOF_SHORT 2
- # define SIZEOF_INT 4
- # define SIZEOF_LONG 4
- # define SIZEOF_LONG_LONG 8
- /* libntp/snprintf.c doesn't know %I64d */
- #define ISC_PLATFORM_QUADFORMAT "ll"
- # define HAVE_ALLOCA 1
- # define HAVE_GETCLOCK 1
- # define HAVE_MEMMOVE 1
- # define HAVE_TIMEGM 1 /* actually _mkgmtime */
- # define HAVE_IO_COMPLETION_PORT
- # define ISC_PLATFORM_NEEDNTOP
- # define ISC_PLATFORM_NEEDPTON
- #define HAVE_BSD_NICE /* emulate BSD setpriority() */
- #define HW_WANT_RPL_VSNPRINTF 1
- #define vsnprintf rpl_vsnprintf
- #include <stdarg.h>
- int rpl_vsnprintf(char *, size_t, const char *, va_list);
- #define HW_WANT_RPL_SNPRINTF 1
- #define snprintf rpl_snprintf
- int rpl_snprintf(char *, size_t, const char *, ...);
- #define HAVE_VSNPRINTF 1
- #define HAVE_SNPRINTF 1
- typedef char *caddr_t;
- #ifdef _WCTYPE_T_DEFINED /* see vc/include/crtdefs.h */
- #define HAVE_WINT_T 1
- #endif
- #ifndef _INTPTR_T_DEFINED
- typedef long intptr_t;
- #define _INTPTR_T_DEFINED
- #endif
- #define HAVE_INTPTR_T 1
- #ifndef _UINTPTR_T_DEFINED
- typedef unsigned long uintptr_t;
- #define _UINTPTR_T_DEFINED
- #endif
- #define HAVE_UINTPTR_T 1
- #if !defined( _W64 )
- /*
- * if DWORD_PTR needs to be defined then the build environment
- * is pure 32 bit Windows. Since DWORD_PTR and DWORD have
- * the same size in 32 bit Windows we can safely define
- * a replacement.
- */
- typedef DWORD DWORD_PTR;
- #endif
- #define NEED_S_CHAR_TYPEDEF
- /* C99 exact size integer support. */
- #if defined(_MSC_VER) && _MSC_VER<1800
- # define MISSING_INTTYPES_H 1 /* not provided by VS2012 and earlier */
- # define MISSING_STDBOOL_H 1 /* not provided by VS2012 and earlier */
- # define MISSING_C99_STRUCT_INIT 1 /* see [Bug 2728] */
- #else
- #if defined(_MSC_VER) && _MSC_VER>=1800
- /* VS2013 and above support C99 types */
- # define HAVE_INT8_T 1
- # define HAVE_UINT8_T 1
- # define HAVE_INT16_T 1
- # define HAVE_UINT16_T 1
- # define HAVE_INT32_T 1
- # define HAVE_UINT32_T 1
- #endif
- #endif
- #if !defined (MISSING_STDBOOL_H)
- # define HAVE_STDBOOL_H
- #endif
- /* Directory separator, usually / or \ */
- #define DIR_SEP '\\'
- #define POSIX_SHELL "/bin/sh"
- #define ULONG_CONST(a) a ## UL
- #define NOKMEM
- #ifndef STR_SYSTEM
- #define STR_SYSTEM "Windows"
- #endif
- #ifndef STR_PROCESSOR
- #define STRINGIZE(arg) #arg
- #ifdef _M_IX86
- #ifndef _M_IX86_FP
- #define STR_PROCESSOR "x86"
- #else
- #if !_M_IX86_FP
- #define STR_PROCESSOR "x86"
- #else
- #if _M_IX86_FP > 2
- #define STR_PROCESSOR "x86-FP-" STRINGIZE(_M_IX86_FP)
- #else
- #if _M_IX86_FP == 2
- #define STR_PROCESSOR "x86-SSE2"
- #else
- #define STR_PROCESSOR "x86-SSE"
- #endif /* _M_IX86 == 2 */
- #endif /* _M_IX86_FP > 2 */
- #endif /* !_M_IX86_FP */
- #endif /* !defined(_M_IX86_FP) */
- #endif /* !defined(_M_IX86) */
- #ifdef _M_IA64
- #define STR_PROCESSOR "Itanium"
- #endif
- #ifdef _M_X64
- #define STR_PROCESSOR "x64"
- #endif
- #endif /* !defined(STR_PROCESSOR) */
- #undef STRINGIZE
- #define SIOCGIFFLAGS SIO_GET_INTERFACE_LIST /* used in ntp_io.c */
- /*
- * Below this line are includes which must happen after the bulk of
- * config.h is processed. If you need to add another #include to this
- * file the preferred location is near the top, above the similar
- * line of hyphens.
- * ---------------------------------------------------------------------
- */
- /*
- * Include standard stat information
- */
- #include <isc/stat.h>
- #endif /* CONFIG_H */