1e18a033bSKonstantin Ananyev
2e18a033bSKonstantin Ananyev/*
3e18a033bSKonstantin Ananyev * Copyright (C) Igor Sysoev
4e18a033bSKonstantin Ananyev * Copyright (C) Nginx, Inc.
5e18a033bSKonstantin Ananyev */
6e18a033bSKonstantin Ananyev
7e18a033bSKonstantin Ananyev
8e18a033bSKonstantin Ananyev#ifndef _NGX_WIN32_CONFIG_H_INCLUDED_
9e18a033bSKonstantin Ananyev#define _NGX_WIN32_CONFIG_H_INCLUDED_
10e18a033bSKonstantin Ananyev
11e18a033bSKonstantin Ananyev
12e18a033bSKonstantin Ananyev#undef  WIN32
13e18a033bSKonstantin Ananyev#define WIN32         0x0400
14e18a033bSKonstantin Ananyev#define _WIN32_WINNT  0x0501
15e18a033bSKonstantin Ananyev
16e18a033bSKonstantin Ananyev
17e18a033bSKonstantin Ananyev#define STRICT
18e18a033bSKonstantin Ananyev#define WIN32_LEAN_AND_MEAN
19e18a033bSKonstantin Ananyev
20e18a033bSKonstantin Ananyev/* enable getenv() and gmtime() in msvc8 */
21e18a033bSKonstantin Ananyev#define _CRT_SECURE_NO_WARNINGS
22e18a033bSKonstantin Ananyev#define _CRT_SECURE_NO_DEPRECATE
23e18a033bSKonstantin Ananyev
24e18a033bSKonstantin Ananyev/* enable gethostbyname() in msvc2015 */
25e18a033bSKonstantin Ananyev#if !(NGX_HAVE_INET6)
26e18a033bSKonstantin Ananyev#define _WINSOCK_DEPRECATED_NO_WARNINGS
27e18a033bSKonstantin Ananyev#endif
28e18a033bSKonstantin Ananyev
29e18a033bSKonstantin Ananyev/*
30e18a033bSKonstantin Ananyev * we need to include <windows.h> explicitly before <winsock2.h> because
31e18a033bSKonstantin Ananyev * the warning 4201 is enabled in <windows.h>
32e18a033bSKonstantin Ananyev */
33e18a033bSKonstantin Ananyev#include <windows.h>
34e18a033bSKonstantin Ananyev
35e18a033bSKonstantin Ananyev#ifdef _MSC_VER
36e18a033bSKonstantin Ananyev#pragma warning(disable:4201)
37e18a033bSKonstantin Ananyev#endif
38e18a033bSKonstantin Ananyev
39e18a033bSKonstantin Ananyev#include <winsock2.h>
40e18a033bSKonstantin Ananyev#include <ws2tcpip.h>  /* ipv6 */
41e18a033bSKonstantin Ananyev#include <mswsock.h>
42e18a033bSKonstantin Ananyev#include <shellapi.h>
43e18a033bSKonstantin Ananyev#include <stddef.h>    /* offsetof() */
44e18a033bSKonstantin Ananyev
45e18a033bSKonstantin Ananyev#ifdef __MINGW64_VERSION_MAJOR
46e18a033bSKonstantin Ananyev
47e18a033bSKonstantin Ananyev/* GCC MinGW-w64 supports _FILE_OFFSET_BITS */
48e18a033bSKonstantin Ananyev#define _FILE_OFFSET_BITS 64
49e18a033bSKonstantin Ananyev
50e18a033bSKonstantin Ananyev#elif defined __GNUC__
51e18a033bSKonstantin Ananyev
52e18a033bSKonstantin Ananyev/* GCC MinGW's stdio.h includes sys/types.h */
53e18a033bSKonstantin Ananyev#define _OFF_T_
54e18a033bSKonstantin Ananyev#define __have_typedef_off_t
55e18a033bSKonstantin Ananyev
56e18a033bSKonstantin Ananyev#endif
57e18a033bSKonstantin Ananyev
58e18a033bSKonstantin Ananyev#include <stdio.h>
59e18a033bSKonstantin Ananyev#include <stdlib.h>
60e18a033bSKonstantin Ananyev#include <stdarg.h>
61e18a033bSKonstantin Ananyev#ifdef __GNUC__
62e18a033bSKonstantin Ananyev#include <stdint.h>
63e18a033bSKonstantin Ananyev#endif
64e18a033bSKonstantin Ananyev#include <ctype.h>
65e18a033bSKonstantin Ananyev#include <locale.h>
66e18a033bSKonstantin Ananyev
67e18a033bSKonstantin Ananyev#ifdef __WATCOMC__
68e18a033bSKonstantin Ananyev#define _TIME_T_DEFINED
69e18a033bSKonstantin Ananyevtypedef long  time_t;
70e18a033bSKonstantin Ananyev/* OpenWatcom defines time_t as "unsigned long" */
71e18a033bSKonstantin Ananyev#endif
72e18a033bSKonstantin Ananyev
73e18a033bSKonstantin Ananyev#include <time.h>      /* localtime(), strftime() */
74e18a033bSKonstantin Ananyev
75e18a033bSKonstantin Ananyev
76e18a033bSKonstantin Ananyev#ifdef _MSC_VER
77e18a033bSKonstantin Ananyev
78e18a033bSKonstantin Ananyev/* the end of the precompiled headers */
79e18a033bSKonstantin Ananyev#pragma hdrstop
80e18a033bSKonstantin Ananyev
81e18a033bSKonstantin Ananyev#pragma warning(default:4201)
82e18a033bSKonstantin Ananyev
83e18a033bSKonstantin Ananyev/* disable some "-W4" level warnings */
84e18a033bSKonstantin Ananyev
85e18a033bSKonstantin Ananyev/* 'type cast': from function pointer to data pointer */
86e18a033bSKonstantin Ananyev#pragma warning(disable:4054)
87e18a033bSKonstantin Ananyev
88e18a033bSKonstantin Ananyev/* 'type cast': from data pointer to function pointer */
89e18a033bSKonstantin Ananyev#pragma warning(disable:4055)
90e18a033bSKonstantin Ananyev
91e18a033bSKonstantin Ananyev/* 'function' : different 'const' qualifiers */
92e18a033bSKonstantin Ananyev#pragma warning(disable:4090)
93e18a033bSKonstantin Ananyev
94e18a033bSKonstantin Ananyev/* unreferenced formal parameter */
95e18a033bSKonstantin Ananyev#pragma warning(disable:4100)
96e18a033bSKonstantin Ananyev
97e18a033bSKonstantin Ananyev/* FD_SET() and FD_CLR(): conditional expression is constant */
98e18a033bSKonstantin Ananyev#pragma warning(disable:4127)
99e18a033bSKonstantin Ananyev
100e18a033bSKonstantin Ananyev/* conversion from 'type1' to 'type2', possible loss of data */
101e18a033bSKonstantin Ananyev#pragma warning(disable:4244)
102e18a033bSKonstantin Ananyev
103e18a033bSKonstantin Ananyev/* conversion from 'size_t' to 'type', possible loss of data */
104e18a033bSKonstantin Ananyev#pragma warning(disable:4267)
105e18a033bSKonstantin Ananyev
106e18a033bSKonstantin Ananyev/* array is too small to include a terminating null character */
107e18a033bSKonstantin Ananyev#pragma warning(disable:4295)
108e18a033bSKonstantin Ananyev
109e18a033bSKonstantin Ananyev#endif
110e18a033bSKonstantin Ananyev
111e18a033bSKonstantin Ananyev
112e18a033bSKonstantin Ananyev#ifdef __WATCOMC__
113e18a033bSKonstantin Ananyev
114e18a033bSKonstantin Ananyev/* symbol 'ngx_rbtree_min' has been defined, but not referenced */
115e18a033bSKonstantin Ananyev#pragma disable_message(202)
116e18a033bSKonstantin Ananyev
117e18a033bSKonstantin Ananyev#endif
118e18a033bSKonstantin Ananyev
119e18a033bSKonstantin Ananyev
120e18a033bSKonstantin Ananyev#ifdef __BORLANDC__
121e18a033bSKonstantin Ananyev
122e18a033bSKonstantin Ananyev/* the end of the precompiled headers */
123e18a033bSKonstantin Ananyev#pragma hdrstop
124e18a033bSKonstantin Ananyev
125e18a033bSKonstantin Ananyev/* functions containing (for|while|some if) are not expanded inline */
126e18a033bSKonstantin Ananyev#pragma warn -8027
127e18a033bSKonstantin Ananyev
128e18a033bSKonstantin Ananyev/* unreferenced formal parameter */
129e18a033bSKonstantin Ananyev#pragma warn -8057
130e18a033bSKonstantin Ananyev
131e18a033bSKonstantin Ananyev/* suspicious pointer arithmetic */
132e18a033bSKonstantin Ananyev#pragma warn -8072
133e18a033bSKonstantin Ananyev
134e18a033bSKonstantin Ananyev#endif
135e18a033bSKonstantin Ananyev
136e18a033bSKonstantin Ananyev
137e18a033bSKonstantin Ananyev#include <ngx_auto_config.h>
138e18a033bSKonstantin Ananyev
139e18a033bSKonstantin Ananyev
140e18a033bSKonstantin Ananyev#define ngx_inline          __inline
141e18a033bSKonstantin Ananyev#define ngx_cdecl           __cdecl
142e18a033bSKonstantin Ananyev
143e18a033bSKonstantin Ananyev
144e18a033bSKonstantin Ananyev#ifdef _MSC_VER
145e18a033bSKonstantin Ananyevtypedef unsigned __int32    uint32_t;
146e18a033bSKonstantin Ananyevtypedef __int32             int32_t;
147e18a033bSKonstantin Ananyevtypedef unsigned __int16    uint16_t;
148e18a033bSKonstantin Ananyev#define ngx_libc_cdecl      __cdecl
149e18a033bSKonstantin Ananyev
150e18a033bSKonstantin Ananyev#elif defined __BORLANDC__
151e18a033bSKonstantin Ananyevtypedef unsigned __int32    uint32_t;
152e18a033bSKonstantin Ananyevtypedef __int32             int32_t;
153e18a033bSKonstantin Ananyevtypedef unsigned __int16    uint16_t;
154e18a033bSKonstantin Ananyev#define ngx_libc_cdecl      __cdecl
155e18a033bSKonstantin Ananyev
156e18a033bSKonstantin Ananyev#else /* __WATCOMC__ */
157e18a033bSKonstantin Ananyevtypedef unsigned int        uint32_t;
158e18a033bSKonstantin Ananyevtypedef int                 int32_t;
159e18a033bSKonstantin Ananyevtypedef unsigned short int  uint16_t;
160e18a033bSKonstantin Ananyev#define ngx_libc_cdecl
161e18a033bSKonstantin Ananyev
162e18a033bSKonstantin Ananyev#endif
163e18a033bSKonstantin Ananyev
164e18a033bSKonstantin Ananyevtypedef __int64             int64_t;
165e18a033bSKonstantin Ananyevtypedef unsigned __int64    uint64_t;
166e18a033bSKonstantin Ananyev
167e18a033bSKonstantin Ananyev#if __BORLANDC__
168e18a033bSKonstantin Ananyevtypedef int                 intptr_t;
169e18a033bSKonstantin Ananyevtypedef u_int               uintptr_t;
170e18a033bSKonstantin Ananyev#endif
171e18a033bSKonstantin Ananyev
172e18a033bSKonstantin Ananyev
173e18a033bSKonstantin Ananyev#ifndef __MINGW64_VERSION_MAJOR
174e18a033bSKonstantin Ananyev
175e18a033bSKonstantin Ananyev/* Windows defines off_t as long, which is 32-bit */
176e18a033bSKonstantin Ananyevtypedef __int64             off_t;
177e18a033bSKonstantin Ananyev#define _OFF_T_DEFINED
178e18a033bSKonstantin Ananyev
179e18a033bSKonstantin Ananyev#endif
180e18a033bSKonstantin Ananyev
181e18a033bSKonstantin Ananyev
182e18a033bSKonstantin Ananyev#ifdef __WATCOMC__
183e18a033bSKonstantin Ananyev
184e18a033bSKonstantin Ananyev/* off_t is redefined by sys/types.h used by zlib.h */
185e18a033bSKonstantin Ananyev#define __TYPES_H_INCLUDED
186e18a033bSKonstantin Ananyevtypedef int                 dev_t;
187e18a033bSKonstantin Ananyevtypedef unsigned int        ino_t;
188e18a033bSKonstantin Ananyev
189e18a033bSKonstantin Ananyev#elif __BORLANDC__
190e18a033bSKonstantin Ananyev
191e18a033bSKonstantin Ananyev/* off_t is redefined by sys/types.h used by zlib.h */
192e18a033bSKonstantin Ananyev#define __TYPES_H
193e18a033bSKonstantin Ananyev
194e18a033bSKonstantin Ananyevtypedef int                 dev_t;
195e18a033bSKonstantin Ananyevtypedef unsigned int        ino_t;
196e18a033bSKonstantin Ananyev
197e18a033bSKonstantin Ananyev#endif
198e18a033bSKonstantin Ananyev
199e18a033bSKonstantin Ananyev
200e18a033bSKonstantin Ananyev#ifndef __GNUC__
201e18a033bSKonstantin Ananyev#ifdef _WIN64
202e18a033bSKonstantin Ananyevtypedef __int64             ssize_t;
203e18a033bSKonstantin Ananyev#else
204e18a033bSKonstantin Ananyevtypedef int                 ssize_t;
205e18a033bSKonstantin Ananyev#endif
206e18a033bSKonstantin Ananyev#endif
207e18a033bSKonstantin Ananyev
208e18a033bSKonstantin Ananyev
209e18a033bSKonstantin Ananyevtypedef uint32_t            in_addr_t;
210e18a033bSKonstantin Ananyevtypedef u_short             in_port_t;
211e18a033bSKonstantin Ananyevtypedef int                 sig_atomic_t;
212e18a033bSKonstantin Ananyev
213e18a033bSKonstantin Ananyev
214e18a033bSKonstantin Ananyev#ifdef _WIN64
215e18a033bSKonstantin Ananyev
216e18a033bSKonstantin Ananyev#define NGX_PTR_SIZE            8
217e18a033bSKonstantin Ananyev#define NGX_SIZE_T_LEN          (sizeof("-9223372036854775808") - 1)
218e18a033bSKonstantin Ananyev#define NGX_MAX_SIZE_T_VALUE    9223372036854775807
219e18a033bSKonstantin Ananyev#define NGX_TIME_T_LEN          (sizeof("-9223372036854775808") - 1)
220e18a033bSKonstantin Ananyev#define NGX_TIME_T_SIZE         8
221e18a033bSKonstantin Ananyev#define NGX_MAX_TIME_T_VALUE    9223372036854775807
222e18a033bSKonstantin Ananyev
223e18a033bSKonstantin Ananyev#else
224e18a033bSKonstantin Ananyev
225e18a033bSKonstantin Ananyev#define NGX_PTR_SIZE            4
226e18a033bSKonstantin Ananyev#define NGX_SIZE_T_LEN          (sizeof("-2147483648") - 1)
227e18a033bSKonstantin Ananyev#define NGX_MAX_SIZE_T_VALUE    2147483647
228e18a033bSKonstantin Ananyev#define NGX_TIME_T_LEN          (sizeof("-2147483648") - 1)
229e18a033bSKonstantin Ananyev#define NGX_TIME_T_SIZE         4
230e18a033bSKonstantin Ananyev#define NGX_MAX_TIME_T_VALUE    2147483647
231e18a033bSKonstantin Ananyev
232e18a033bSKonstantin Ananyev#endif
233e18a033bSKonstantin Ananyev
234e18a033bSKonstantin Ananyev
235e18a033bSKonstantin Ananyev#define NGX_OFF_T_LEN           (sizeof("-9223372036854775807") - 1)
236e18a033bSKonstantin Ananyev#define NGX_MAX_OFF_T_VALUE     9223372036854775807
237e18a033bSKonstantin Ananyev#define NGX_SIG_ATOMIC_T_SIZE   4
238e18a033bSKonstantin Ananyev
239e18a033bSKonstantin Ananyev
240e18a033bSKonstantin Ananyev#define NGX_HAVE_LITTLE_ENDIAN  1
241e18a033bSKonstantin Ananyev#define NGX_HAVE_NONALIGNED     1
242e18a033bSKonstantin Ananyev
243e18a033bSKonstantin Ananyev
244e18a033bSKonstantin Ananyev#define NGX_WIN_NT        200000
245e18a033bSKonstantin Ananyev
246e18a033bSKonstantin Ananyev
247e18a033bSKonstantin Ananyev#define NGX_LISTEN_BACKLOG           511
248e18a033bSKonstantin Ananyev
249e18a033bSKonstantin Ananyev
250e18a033bSKonstantin Ananyev#ifndef NGX_HAVE_INHERITED_NONBLOCK
251e18a033bSKonstantin Ananyev#define NGX_HAVE_INHERITED_NONBLOCK  1
252e18a033bSKonstantin Ananyev#endif
253e18a033bSKonstantin Ananyev
254e18a033bSKonstantin Ananyev#ifndef NGX_HAVE_CASELESS_FILESYSTEM
255e18a033bSKonstantin Ananyev#define NGX_HAVE_CASELESS_FILESYSTEM  1
256e18a033bSKonstantin Ananyev#endif
257e18a033bSKonstantin Ananyev
258e18a033bSKonstantin Ananyev#ifndef NGX_HAVE_WIN32_TRANSMITPACKETS
259e18a033bSKonstantin Ananyev#define NGX_HAVE_WIN32_TRANSMITPACKETS  1
260e18a033bSKonstantin Ananyev#define NGX_HAVE_WIN32_TRANSMITFILE     0
261e18a033bSKonstantin Ananyev#endif
262e18a033bSKonstantin Ananyev
263e18a033bSKonstantin Ananyev#ifndef NGX_HAVE_WIN32_TRANSMITFILE
264e18a033bSKonstantin Ananyev#define NGX_HAVE_WIN32_TRANSMITFILE  1
265e18a033bSKonstantin Ananyev#endif
266e18a033bSKonstantin Ananyev
267e18a033bSKonstantin Ananyev#if (NGX_HAVE_WIN32_TRANSMITPACKETS) || (NGX_HAVE_WIN32_TRANSMITFILE)
268e18a033bSKonstantin Ananyev#define NGX_HAVE_SENDFILE  1
269e18a033bSKonstantin Ananyev#endif
270e18a033bSKonstantin Ananyev
271e18a033bSKonstantin Ananyev#ifndef NGX_HAVE_SO_SNDLOWAT
272e18a033bSKonstantin Ananyev/* setsockopt(SO_SNDLOWAT) returns error WSAENOPROTOOPT */
273e18a033bSKonstantin Ananyev#define NGX_HAVE_SO_SNDLOWAT         0
274e18a033bSKonstantin Ananyev#endif
275e18a033bSKonstantin Ananyev
276e18a033bSKonstantin Ananyev#define NGX_HAVE_GETADDRINFO         1
277e18a033bSKonstantin Ananyev
278e18a033bSKonstantin Ananyev#define ngx_random               rand
279e18a033bSKonstantin Ananyev#define ngx_debug_init()
280e18a033bSKonstantin Ananyev
281e18a033bSKonstantin Ananyev
282e18a033bSKonstantin Ananyev#endif /* _NGX_WIN32_CONFIG_H_INCLUDED_ */
283