Annotation of embedaddon/ntp/ports/winnt/include/config.h, revision 1.1.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>