Annotation of embedaddon/ntp/ports/winnt/include/config.h, revision 1.1
1.1 ! misho 1: /* config.h for Windows NT */
! 2:
! 3: #ifndef CONFIG_H
! 4: #define CONFIG_H
! 5:
! 6: /*
! 7: * For newer compilers we may we want newer prototypes from Windows
! 8: * so we target _WIN32_WINNT at WINXP, but we also want our binary to
! 9: * run on NT 4, so newer functions are runtime linked and the linker
! 10: * /version:0x0400 * switch is used to override the .exe file minimum
! 11: * version. For older compilers we leave it at NT 4.0.
! 12: */
! 13: #ifndef _WIN32_WINNT
! 14: #if _MSC_VER > 1400 /* At least VS 2005 */
! 15: #define _WIN32_WINNT 0x0501
! 16: #else /* NT 4.0 */
! 17: #define _WIN32_WINNT 0x0400
! 18: #endif
! 19: #endif
! 20:
! 21:
! 22: #define _CRT_SECURE_NO_DEPRECATE 1
! 23: /*
! 24: * ANSI C compliance enabled
! 25: */
! 26: #define __STDC__ 1
! 27:
! 28: /*
! 29: * Enable the debug build of MS C runtime to dump leaks
! 30: * at exit time (currently only if run under a debugger).
! 31: */
! 32: #if defined(_MSC_VER) && defined(_DEBUG)
! 33: #define _CRTDBG_MAP_ALLOC
! 34: #include <stdlib.h>
! 35: #include <malloc.h>
! 36: #include <crtdbg.h>
! 37: /* #define MALLOC_LINT */ /* defers free() */
! 38: # define EREALLOC_IMPL(ptr, newsz, filenm, loc) \
! 39: _realloc_dbg(ptr, newsz, _NORMAL_BLOCK, filenm, loc)
! 40: #endif
! 41:
! 42: /*
! 43: * We need to include stdio.h first before we #define snprintf
! 44: * otherwise we can get errors during the build
! 45: */
! 46: #include <stdio.h>
! 47:
! 48: /* Prevent inclusion of winsock.h in windows.h */
! 49: #ifndef _WINSOCKAPI_
! 50: #define _WINSOCKAPI_
! 51: #endif
! 52:
! 53: #ifndef __RPCASYNC_H__
! 54: #define __RPCASYNC_H__
! 55: #endif
! 56:
! 57: /*
! 58: * VS.NET's version of wspiapi.h has a bug in it
! 59: * where it assigns a value to a variable inside
! 60: * an if statement. It should be comparing them.
! 61: * We prevent inclusion since we are not using this
! 62: * code so we don't have to see the warning messages
! 63: */
! 64: #ifndef _WSPIAPI_H_
! 65: /* #define _WSPIAPI_H_ */ /* need these wrappers for ntpd.exe to load on w2k */
! 66: #endif
! 67:
! 68: /*
! 69: * On Unix struct sock_timeval is equivalent to struct timeval.
! 70: * On Windows built with 64-bit time_t, sock_timeval.tv_sec is a long
! 71: * as required by Windows' socket() interface timeout argument, while
! 72: * timeval.tv_sec is time_t for the more common use as a UTC time
! 73: * within NTP.
! 74: *
! 75: * winsock.h unconditionally defines struct timeval with long tv_sec
! 76: * instead of time_t tv_sec. We redirect its declaration to struct
! 77: * sock_timeval instead of struct timeval with a #define.
! 78: */
! 79: #define timeval sock_timeval
! 80:
! 81: /* Include Windows headers */
! 82: #include <windows.h>
! 83: #include <winsock2.h>
! 84: #include <ws2tcpip.h>
! 85:
! 86: #undef timeval /* see sock_timeval #define and comment above */
! 87:
! 88: /*
! 89: * Some definitions we are using are missing in the headers
! 90: * shipping with VC6. However, if the SDK is installed then the
! 91: * SDK's headers may declare the missing types. This is at least
! 92: * the case in the Oct 2001 SDK. That SDK and all subsequent
! 93: * versions also define the symbol _W64, so we can use that one
! 94: * to determine whether some types need to be defined, or not.
! 95: */
! 96: #ifdef _W64
! 97: /* VC6 can include wspiapi.h only if the SDK is installed */
! 98: #include <wspiapi.h>
! 99: #endif
! 100:
! 101: #undef interface
! 102: #include <process.h>
! 103: #include <time.h> /* time_t for timeval decl */
! 104:
! 105: /* ---------------------------------------------------------------------
! 106: * Above this line are #include lines and the few #define lines
! 107: * needed before including headers.
! 108: */
! 109:
! 110: struct timeval {
! 111: time_t tv_sec;
! 112: long tv_usec;
! 113: };
! 114:
! 115: /*
! 116: * On Unix open() works for tty (serial) devices just fine, while on
! 117: * Windows refclock serial devices are opened using CreateFile, a lower
! 118: * level than the CRT-provided descriptors, because the C runtime lacks
! 119: * tty APIs. For refclocks which wish to use open() as well as or
! 120: * instead of refclock_open(), tty_open() is equivalent to open() on
! 121: * Unix and implemented in the Windows port similarly to
! 122: * refclock_open().
! 123: */
! 124: extern int tty_open(char *, int, int);
! 125:
! 126: /*
! 127: * disable use of __declspec(dllexport) by libisc routines
! 128: */
! 129: #define ISC_STATIC_WIN 1
! 130:
! 131: /*
! 132: * ntp_rfc2553.h has cruft under #ifdef SYS_WINNT which is
! 133: * appropriate for older Microsoft IPv6 definitions, such
! 134: * as in_addr6 being the struct type. We can differentiate
! 135: * the RFC2553-compliant newer headers because they have
! 136: * #define in_addr6 in6_addr
! 137: * for backward compatibility. With the newer headers,
! 138: * we define ISC_PLATFORM_HAVEIPV6 and disable the cruft.
! 139: */
! 140: #ifdef in_addr6
! 141: #define WANT_IPV6
! 142: #define ISC_PLATFORM_HAVEIPV6
! 143: #define ISC_PLATFORM_HAVESCOPEID
! 144: #define HAVE_STRUCT_SOCKADDR_STORAGE
! 145: #define ISC_PLATFORM_HAVEIN6PKTINFO
! 146: #endif /* in_addr6 / RFC2553-compliant IPv6 headers */
! 147:
! 148: #define NO_OPTION_NAME_WARNINGS
! 149:
! 150: #if !defined( _W64 )
! 151: /*
! 152: * if ULONG_PTR needs to be defined then the build environment
! 153: * is pure 32 bit Windows. Since ULONG_PTR and DWORD have
! 154: * the same size in 32 bit Windows we can safely define
! 155: * a replacement.
! 156: */
! 157: typedef DWORD ULONG_PTR;
! 158: /* VC6 doesn't know about socklen_t, except if the SDK is installed */
! 159: typedef int socklen_t;
! 160: #endif /* _W64 */
! 161:
! 162: #define ISC_PLATFORM_NEEDIN6ADDRANY
! 163: #define HAVE_SOCKADDR_IN6
! 164:
! 165: /*
! 166: * The type of the socklen_t defined for getnameinfo() and getaddrinfo()
! 167: * is int for VS compilers on Windows but the type is already declared
! 168: */
! 169: #define GETSOCKNAME_SOCKLEN_TYPE socklen_t
! 170:
! 171: /*
! 172: * Older SDKs do not define SO_EXCLUSIVEADDRUSE in winsock2.h
! 173: */
! 174: #ifndef SO_EXCLUSIVEADDRUSE
! 175: #define SO_EXCLUSIVEADDRUSE ((int)(~SO_REUSEADDR))
! 176: #endif
! 177:
! 178: /*
! 179: * Define this macro to control the behavior of connection
! 180: * resets on UDP sockets. See Microsoft KnowledgeBase Article Q263823
! 181: * for details.
! 182: * Based on that article, it is surprising that a much newer winsock2.h
! 183: * does not define SIO_UDP_CONNRESET (the one that comes with VS 2008).
! 184: * NOTE: This requires that Windows 2000 systems install Service Pack 2
! 185: * or later.
! 186: */
! 187: #ifndef SIO_UDP_CONNRESET
! 188: #define SIO_UDP_CONNRESET _WSAIOW(IOC_VENDOR,12)
! 189: #endif
! 190:
! 191: #if defined _MSC_VER && _MSC_VER < 1400
! 192: /*
! 193: * Use 32-bit time definitions for versions prior to VS 2005
! 194: * VS 2005 defaults to 64-bit time
! 195: */
! 196: # define SIZEOF_TIME_T 4
! 197: #else
! 198: # define SIZEOF_TIME_T 8
! 199: #endif
! 200:
! 201:
! 202: /*
! 203: * An attempt to cut down the number of warnings generated during compilation.
! 204: * All of these should be benign to disable.
! 205: */
! 206:
! 207: #pragma warning(disable: 4100) /* unreferenced formal parameter */
! 208: #pragma warning(disable: 4127) /* conditional expression is constant */
! 209: #pragma warning(disable: 4996) /* more secure replacement available */
! 210:
! 211: /*
! 212: * Windows NT Configuration Values
! 213: */
! 214: #if defined _DEBUG /* Use VC standard macro definitions */
! 215: # define DEBUG 1
! 216: #endif
! 217:
! 218: #define __windows__ 1
! 219: /* Define if you have the ANSI C header files. */
! 220: #define STDC_HEADERS 1
! 221:
! 222: #define OPEN_BCAST_SOCKET 1 /* for ntp_io.c */
! 223: #define TYPEOF_IP_MULTICAST_LOOP BOOL
! 224: #define SETSOCKOPT_ARG_CAST (const char *)
! 225: #define HAVE_RANDOM
! 226: #define MAXHOSTNAMELEN 64
! 227: #define AUTOKEY
! 228: #define SAVECONFIG 1
! 229:
! 230: /*
! 231: * Multimedia timer enable
! 232: */
! 233: #define USE_MM_TIMER
! 234:
! 235: /* Enable OpenSSL */
! 236: #define OPENSSL 1
! 237:
! 238: /*
! 239: * Keywords and functions that Microsoft maps
! 240: * to other names
! 241: */
! 242: #define inline __inline
! 243: #define vsnprintf _vsnprintf
! 244: #define snprintf _snprintf
! 245: #define stricmp _stricmp
! 246: #define strcasecmp _stricmp
! 247: #define isascii __isascii
! 248: #define finite _finite
! 249: #define random rand
! 250: #define srandom srand
! 251: #define fdopen _fdopen
! 252: #define read _read
! 253: #define open _open
! 254: #ifndef close
! 255: #define close _close
! 256: #endif
! 257: #define write _write
! 258: #define strdup _strdup
! 259: #define stat _stat /*struct stat from <sys/stat.h> */
! 260: #define fstat _fstat
! 261: #define unlink _unlink
! 262: /*
! 263: * punt on fchmod on Windows
! 264: */
! 265: #define fchmod(x,y) {}
! 266: #define lseek _lseek
! 267: #define pipe _pipe
! 268: #define dup2 _dup2
! 269: /*
! 270: * scale, unix sleep is seconds, Windows Sleep is msec
! 271: */
! 272: #define sleep(x) Sleep((unsigned)(x) * 1000)
! 273: #define fileno _fileno
! 274: #define isatty _isatty
! 275: #define mktemp _mktemp
! 276: #define getpid _getpid
! 277: #define timegm _mkgmtime
! 278:
! 279: typedef int pid_t; /* PID is an int */
! 280: typedef int ssize_t; /* ssize is an int */
! 281: typedef __int32 int32_t; /* define a typedef for int32_t */
! 282: #define HAVE_INT32_T 1
! 283:
! 284: /*
! 285: * Map the stream to the file number
! 286: */
! 287: #define STDOUT_FILENO _fileno(stdout)
! 288: #define STDERR_FILENO _fileno(stderr)
! 289:
! 290: /*
! 291: * To minimize Windows-specific changes to the rest of the NTP code,
! 292: * particularly reference clocks, ntp_stdlib.h will
! 293: *
! 294: * #define strerror(e) ntp_strerror(e)
! 295: *
! 296: * to deal with our mixture of C runtime (open, write) and Windows
! 297: * (sockets, serial ports) error codes. This is an ugly hack because
! 298: * both use the lowest values differently, but particularly for ntpd,
! 299: * it's not a problem.
! 300: */
! 301: #define NTP_REDEFINE_STRERROR
! 302:
! 303: # define MCAST /* Enable Multicast Support */
! 304: # define MULTICAST_NONEWSOCKET /* Don't create a new socket for mcast address */
! 305:
! 306: # define REFCLOCK /* from ntpd.mak */
! 307:
! 308: /* # define CLOCK_PARSE */
! 309: # define CLOCK_ARBITER
! 310: # define CLOCK_ARCRON_MSF
! 311: # define OWN_PPS_NTP_TIMESTAMP_FROM_COUNTER /* timepps.h */
! 312: # define HAVE_TIMEPPS_H
! 313: # define HAVE_PPSAPI
! 314: # define CLOCK_ATOM
! 315: # define CLOCK_CHRONOLOG
! 316: # define CLOCK_DUMBCLOCK
! 317: # define CLOCK_HOPF_SERIAL /* device 38, hopf DCF77/GPS serial line receiver */
! 318: # define CLOCK_HOPF_PCI /* device 39, hopf DCF77/GPS PCI-Bus receiver */
! 319: # define CLOCK_JUPITER
! 320: # define CLOCK_LOCAL
! 321: # define CLOCK_NMEA
! 322: # define CLOCK_ONCORE
! 323: # define CLOCK_PALISADE /* from ntpd.mak */
! 324: /* # define CLOCK_SHM */
! 325: # define CLOCK_SPECTRACOM /* refclock_wwvb.c */
! 326: # define CLOCK_TRIMBLEDC
! 327: # define CLOCK_TRIMTSIP 1
! 328: # define CLOCK_TRUETIME
! 329:
! 330: # define NTP_LITTLE_ENDIAN /* from libntp.mak */
! 331: # define NTP_POSIX_SOURCE
! 332:
! 333: # define SYSLOG_FILE /* from libntp.mak */
! 334: # define HAVE_GETCLOCK
! 335:
! 336: # define SIZEOF_SIGNED_CHAR 1
! 337: # define SIZEOF_INT 4 /* for ntp_types.h */
! 338:
! 339: # define QSORT_USES_VOID_P
! 340: # define HAVE_SETVBUF
! 341: # define HAVE_VSPRINTF
! 342: # define HAVE_SNPRINTF
! 343: # define HAVE_VSNPRINTF
! 344: # define HAVE_PROTOTYPES /* from ntpq.mak */
! 345: # define HAVE_MEMMOVE
! 346: # define HAVE_TERMIOS_H
! 347: # define HAVE_ERRNO_H
! 348: # define HAVE_STDARG_H
! 349: # define HAVE_NO_NICE
! 350: # define HAVE_MKTIME
! 351: # define HAVE_TIMEGM 1 /* actually _mkgmtime */
! 352: # define HAVE_STRUCT_TIMESPEC
! 353: # define TIME_WITH_SYS_TIME
! 354: # define HAVE_IO_COMPLETION_PORT
! 355: # define ISC_PLATFORM_NEEDNTOP
! 356: # define ISC_PLATFORM_NEEDPTON
! 357: # define HAVE_VPRINTF
! 358:
! 359: #define HAVE_LIMITS_H 1
! 360: #define HAVE_STRDUP 1
! 361: #define HAVE_STRCHR 1
! 362: #define HAVE_FCNTL_H 1
! 363: #define HAVE_SYS_RESOURCE_H
! 364: #define HAVE_BSD_NICE /* emulate BSD setpriority() */
! 365:
! 366: typedef char *caddr_t;
! 367:
! 368: #ifdef _WCTYPE_T_DEFINED /* see vc/include/crtdefs.h */
! 369: #define HAVE_WINT_T
! 370: #endif
! 371:
! 372: #ifndef _INTPTR_T_DEFINED
! 373: typedef long intptr_t;
! 374: #define _INTPTR_T_DEFINED
! 375: #endif
! 376: #define HAVE_INTPTR_T
! 377:
! 378: #ifndef _UINTPTR_T_DEFINED
! 379: typedef unsigned long uintptr_t;
! 380: #define _UINTPTR_T_DEFINED
! 381: #endif
! 382: #define HAVE_UINTPTR_T
! 383:
! 384: #if !defined( _W64 )
! 385: /*
! 386: * if DWORD_PTR needs to be defined then the build environment
! 387: * is pure 32 bit Windows. Since DWORD_PTR and DWORD have
! 388: * the same size in 32 bit Windows we can safely define
! 389: * a replacement.
! 390: */
! 391: typedef DWORD DWORD_PTR;
! 392: #endif
! 393:
! 394: #define NEED_S_CHAR_TYPEDEF
! 395:
! 396: #define USE_PROTOTYPES /* for ntp_types.h */
! 397:
! 398: /* Directory separator, usually / or \ */
! 399: #define DIR_SEP '\\'
! 400:
! 401: #define POSIX_SHELL "/bin/sh" /* libopts/makeshell.c */
! 402:
! 403: #define ULONG_CONST(a) a ## UL
! 404:
! 405: #define NOKMEM
! 406: #define RETSIGTYPE void
! 407:
! 408: #ifndef STR_SYSTEM
! 409: #define STR_SYSTEM "Windows"
! 410: #endif
! 411:
! 412: #ifndef STR_PROCESSOR
! 413:
! 414: #define STRINGIZE(arg) #arg
! 415:
! 416: #ifdef _M_IX86
! 417: #ifndef _M_IX86_FP
! 418: #define STR_PROCESSOR "x86"
! 419: #else
! 420: #if !_M_IX86_FP
! 421: #define STR_PROCESSOR "x86"
! 422: #else
! 423: #if _M_IX86_FP > 2
! 424: #define STR_PROCESSOR "x86-FP-" STRINGIZE(_M_IX86_FP)
! 425: #else
! 426: #if _M_IX86_FP == 2
! 427: #define STR_PROCESSOR "x86-SSE2"
! 428: #else
! 429: #define STR_PROCESSOR "x86-SSE"
! 430: #endif /* _M_IX86 == 2 */
! 431: #endif /* _M_IX86_FP > 2 */
! 432: #endif /* !_M_IX86_FP */
! 433: #endif /* !defined(_M_IX86_FP) */
! 434: #endif /* !defined(_M_IX86) */
! 435:
! 436: #ifdef _M_IA64
! 437: #define STR_PROCESSOR "Itanium"
! 438: #endif
! 439:
! 440: #ifdef _M_X64
! 441: #define STR_PROCESSOR "x64"
! 442: #endif
! 443:
! 444: #endif /* !defined(STR_PROCESSOR) */
! 445:
! 446: #define SIOCGIFFLAGS SIO_GET_INTERFACE_LIST /* used in ntp_io.c */
! 447: /*
! 448: * Below this line are includes which must happen after the bulk of
! 449: * config.h is processed. If you need to add another #include to this
! 450: * file the preferred location is near the top, above the similar
! 451: * line of hyphens.
! 452: * ---------------------------------------------------------------------
! 453: */
! 454:
! 455: /*
! 456: * Include standard stat information
! 457: */
! 458: #include <isc/stat.h>
! 459:
! 460: #endif /* CONFIG_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>