1/* Licensed to the Apache Software Foundation (ASF) under one or more
2 * contributor license agreements.  See the NOTICE file distributed with
3 * this work for additional information regarding copyright ownership.
4 * The ASF licenses this file to You under the Apache License, Version 2.0
5 * (the "License"); you may not use this file except in compliance with
6 * the License.  You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17
18#ifndef APR_H
19#define APR_H
20
21/* GENERATED FILE WARNING!  DO NOT EDIT apr.h
22 *
23 * You must modify apr.hw instead.
24 *
25 * And please, make an effort to stub apr.hnw and apr.h.in in the process.
26 *
27 * This is the Win32 specific version of apr.h.  It is copied from
28 * apr.hw by the apr.dsp and libapr.dsp projects.
29 */
30
31/**
32 * @file apr.h
33 * @brief APR Platform Definitions
34 * @remark This is a generated header generated from include/apr.h.in by
35 * ./configure, or copied from include/apr.hw or include/apr.hnw
36 * for Win32 or Netware by those build environments, respectively.
37 */
38
39#if defined(WIN32) || defined(DOXYGEN)
40
41/* Ignore most warnings (back down to /W3) for poorly constructed headers
42 */
43#if defined(_MSC_VER) && _MSC_VER >= 1200
44#pragma warning(push, 3)
45#endif
46
47/* disable or reduce the frequency of...
48 *   C4057: indirection to slightly different base types
49 *   C4075: slight indirection changes (unsigned short* vs short[])
50 *   C4100: unreferenced formal parameter
51 *   C4127: conditional expression is constant
52 *   C4163: '_rotl64' : not available as an intrinsic function
53 *   C4201: nonstandard extension nameless struct/unions
54 *   C4244: int to char/short - precision loss
55 *   C4514: unreferenced inline function removed
56 */
57#pragma warning(disable: 4100 4127 4163 4201 4514; once: 4057 4075 4244)
58
59/* Ignore Microsoft's interpretation of secure development
60 * and the POSIX string handling API
61 */
62#if defined(_MSC_VER) && _MSC_VER >= 1400
63#ifndef _CRT_SECURE_NO_DEPRECATE
64#define _CRT_SECURE_NO_DEPRECATE
65#endif
66#pragma warning(disable: 4996)
67#endif
68
69/* Has windows.h already been included?  If so, our preferences don't matter,
70 * but we will still need the winsock things no matter what was included.
71 * If not, include a restricted set of windows headers to our tastes.
72 */
73#ifndef _WINDOWS_
74#ifndef WIN32_LEAN_AND_MEAN
75#define WIN32_LEAN_AND_MEAN
76#endif
77#ifndef _WIN32_WINNT
78
79/* Restrict the server to a subset of Windows NT 4.0 header files by default
80 */
81#define _WIN32_WINNT 0x0400
82#endif
83#ifndef NOUSER
84#define NOUSER
85#endif
86#ifndef NOMCX
87#define NOMCX
88#endif
89#ifndef NOIME
90#define NOIME
91#endif
92#include <windows.h>
93/*
94 * Add a _very_few_ declarations missing from the restricted set of headers
95 * (If this list becomes extensive, re-enable the required headers above!)
96 * winsock headers were excluded by WIN32_LEAN_AND_MEAN, so include them now
97 */
98#define SW_HIDE             0
99#ifndef _WIN32_WCE
100#include <winsock2.h>
101#include <mswsock.h>
102#include <ws2tcpip.h>
103#else
104#include <winsock.h>
105#endif
106#endif /* !_WINDOWS_ */
107
108/**
109 * @defgroup apr_platform Platform Definitions
110 * @ingroup APR
111 * @{
112 */
113
114#define APR_INLINE __inline
115#define APR_HAS_INLINE          1
116#ifndef __attribute__
117#define __attribute__(__x)
118#endif
119
120#ifndef _WIN32_WCE
121#define APR_HAVE_ARPA_INET_H    0
122#define APR_HAVE_CONIO_H        1
123#define APR_HAVE_CRYPT_H        0
124#define APR_HAVE_CTYPE_H        1
125#define APR_HAVE_DIRENT_H       0
126#define APR_HAVE_ERRNO_H        1
127#define APR_HAVE_FCNTL_H        1
128#define APR_HAVE_IO_H           1
129#define APR_HAVE_LIMITS_H       1
130#define APR_HAVE_NETDB_H        0
131#define APR_HAVE_NETINET_IN_H   0
132#define APR_HAVE_NETINET_SCTP_H 0
133#define APR_HAVE_NETINET_SCTP_UIO_H 0
134#define APR_HAVE_NETINET_TCP_H  0
135#define APR_HAVE_PTHREAD_H      0
136#define APR_HAVE_SIGNAL_H       1
137#define APR_HAVE_STDARG_H       1
138#define APR_HAVE_STDINT_H       0
139#define APR_HAVE_STDIO_H        1
140#define APR_HAVE_STDLIB_H       1
141#define APR_HAVE_STRING_H       1
142#define APR_HAVE_STRINGS_H      0
143#define APR_HAVE_SYS_SENDFILE_H 0
144#define APR_HAVE_SYS_SIGNAL_H   0
145#define APR_HAVE_SYS_SOCKET_H   0
146#define APR_HAVE_SYS_SOCKIO_H   0
147#define APR_HAVE_SYS_SYSLIMITS_H 0
148#define APR_HAVE_SYS_TIME_H     0
149#define APR_HAVE_SYS_TYPES_H    1
150#define APR_HAVE_SYS_UIO_H      0
151#define APR_HAVE_SYS_WAIT_H     0
152#define APR_HAVE_UNISTD_H       0
153#define APR_HAVE_STDDEF_H       1
154#define APR_HAVE_PROCESS_H      1
155#define APR_HAVE_TIME_H         1
156#else
157#define APR_HAVE_ARPA_INET_H    0
158#define APR_HAVE_CONIO_H        0
159#define APR_HAVE_CRYPT_H        0
160#define APR_HAVE_CTYPE_H        0
161#define APR_HAVE_DIRENT_H       0
162#define APR_HAVE_ERRNO_H        0
163#define APR_HAVE_FCNTL_H        0
164#define APR_HAVE_IO_H           0
165#define APR_HAVE_LIMITS_H       0
166#define APR_HAVE_NETDB_H        0
167#define APR_HAVE_NETINET_IN_H   0
168#define APR_HAVE_NETINET_TCP_H  0
169#define APR_HAVE_PTHREAD_H      0
170#define APR_HAVE_SIGNAL_H       0
171#define APR_HAVE_STDARG_H       0
172#define APR_HAVE_STDINT_H       0
173#define APR_HAVE_STDIO_H        1
174#define APR_HAVE_STDLIB_H       1
175#define APR_HAVE_STRING_H       1
176#define APR_HAVE_STRINGS_H      0
177#define APR_HAVE_SYS_SENDFILE_H 0
178#define APR_HAVE_SYS_SIGNAL_H   0
179#define APR_HAVE_SYS_SOCKET_H   0
180#define APR_HAVE_SYS_SYSLIMITS_H 0
181#define APR_HAVE_SYS_TIME_H     0
182#define APR_HAVE_SYS_TYPES_H    0
183#define APR_HAVE_SYS_UIO_H      0
184#define APR_HAVE_SYS_WAIT_H     0
185#define APR_HAVE_UNISTD_H       0
186#define APR_HAVE_STDDEF_H       0
187#define APR_HAVE_PROCESS_H      0
188#define APR_HAVE_TIME_H         0
189#endif
190
191#define APR_USE_FLOCK_SERIALIZE           0
192#define APR_USE_SYSVSEM_SERIALIZE         0
193#define APR_USE_FCNTL_SERIALIZE           0
194#define APR_USE_PROC_PTHREAD_SERIALIZE    0
195#define APR_USE_PTHREAD_SERIALIZE         0
196
197#define APR_HAS_FLOCK_SERIALIZE           0
198#define APR_HAS_SYSVSEM_SERIALIZE         0
199#define APR_HAS_FCNTL_SERIALIZE           0
200#define APR_HAS_PROC_PTHREAD_SERIALIZE    0
201#define APR_HAS_RWLOCK_SERIALIZE          0
202
203#define APR_HAS_LOCK_CREATE_NP            0
204
205#define APR_PROCESS_LOCK_IS_GLOBAL        0
206
207#define APR_USES_ANONYMOUS_SHM            0
208#define APR_USES_FILEBASED_SHM            0
209#define APR_USES_KEYBASED_SHM             0
210
211#define APR_FILE_BASED_SHM      0
212#define APR_MEM_BASED_SHM       0
213
214#define APR_HAVE_CORKABLE_TCP   0
215#define APR_HAVE_GETRLIMIT      0
216#define APR_HAVE_ICONV          0
217#define APR_HAVE_IN_ADDR        1
218#define APR_HAVE_INET_ADDR      1
219#define APR_HAVE_INET_NETWORK   0
220#define APR_HAVE_IPV6           0
221#define APR_HAVE_MEMMOVE        1
222#define APR_HAVE_SETRLIMIT      0
223#define APR_HAVE_SIGACTION      0
224#define APR_HAVE_SIGSUSPEND     0
225#define APR_HAVE_SIGWAIT        0
226#define APR_HAVE_STRCASECMP     0
227#define APR_HAVE_STRDUP         1
228#define APR_HAVE_STRNCASECMP    0
229#define APR_HAVE_STRSTR         1
230#define APR_HAVE_MEMCHR         1
231#define APR_HAVE_STRUCT_RLIMIT  0
232#define APR_HAVE_UNION_SEMUN    0
233#define APR_HAVE_SCTP           0
234
235#ifndef _WIN32_WCE
236#define APR_HAVE_STRICMP        1
237#define APR_HAVE_STRNICMP       1
238#define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD 1
239#else
240#define APR_HAVE_STRICMP        0
241#define APR_HAVE_STRNICMP       0
242#define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD 0
243#endif
244
245/** @} */
246
247/* We don't include our conditional headers within the doxyblocks
248 * or the extern "C" namespace
249 */
250
251#if APR_HAVE_STDLIB_H
252#include <stdlib.h>
253#endif
254#if APR_HAVE_STDIO_H
255#include <stdio.h>
256#endif
257#if APR_HAVE_SYS_TYPES_H
258#include <sys/types.h>
259#endif
260#if APR_HAVE_STDDEF_H
261#include <stddef.h>
262#endif
263#if APR_HAVE_TIME_H
264#include <time.h>
265#endif
266#if APR_HAVE_PROCESS_H
267#include <process.h>
268#endif
269#if APR_HAVE_IPV6
270#include <ws2tcpip.h>
271#endif
272
273#ifdef __cplusplus
274extern "C" {
275#endif
276
277/**
278 * @addtogroup apr_platform
279 * @ingroup APR
280 * @{
281 */
282
283/*  APR Feature Macros */
284#define APR_HAS_SHARED_MEMORY     1
285#define APR_HAS_THREADS           1
286#define APR_HAS_MMAP              1
287#define APR_HAS_FORK              0
288#define APR_HAS_RANDOM            1
289#define APR_HAS_OTHER_CHILD       1
290#define APR_HAS_DSO               1
291#define APR_HAS_SO_ACCEPTFILTER   0
292#define APR_HAS_UNICODE_FS        1
293#define APR_HAS_PROC_INVOKED      1
294#ifndef _WIN32_WCE
295#define APR_HAS_SENDFILE          1
296#define APR_HAS_USER              1
297#define APR_HAS_LARGE_FILES       1
298#define APR_HAS_XTHREAD_FILES     1
299#else
300#define APR_HAS_SENDFILE          0
301#define APR_HAS_USER              0
302#define APR_HAS_LARGE_FILES       0
303#define APR_HAS_XTHREAD_FILES     0
304#endif
305#define APR_HAS_OS_UUID           1
306
307/* Win32 cannot poll [just yet] on files/pipes.
308 */
309#define APR_FILES_AS_SOCKETS      0
310
311/* This macro indicates whether or not EBCDIC is the native character set.
312 */
313#define APR_CHARSET_EBCDIC        0
314
315/* Is the TCP_NODELAY socket option inherited from listening sockets?
316 */
317#define APR_TCP_NODELAY_INHERITED 1
318
319/* Is the O_NONBLOCK flag inherited from listening sockets?
320 */
321#define APR_O_NONBLOCK_INHERITED  1
322
323/* Typedefs that APR needs. */
324
325typedef  unsigned char     apr_byte_t;
326
327typedef  short             apr_int16_t;
328typedef  unsigned short    apr_uint16_t;
329
330typedef  int               apr_int32_t;
331typedef  unsigned int      apr_uint32_t;
332
333typedef  __int64           apr_int64_t;
334typedef  unsigned __int64  apr_uint64_t;
335
336typedef  size_t      apr_size_t;
337#if APR_HAVE_STDDEF_H
338typedef  ptrdiff_t   apr_ssize_t;
339#else
340typedef  int         apr_ssize_t;
341#endif
342#if APR_HAS_LARGE_FILES
343typedef  __int64     apr_off_t;
344#else
345typedef  int         apr_off_t;
346#endif
347typedef  int         apr_socklen_t;
348
349/* Are we big endian? */
350/* XXX: Fatal assumption on Alpha platforms */
351#define APR_IS_BIGENDIAN	0
352
353#ifdef WIN64
354#define APR_SIZEOF_VOIDP   8
355#else
356#define APR_SIZEOF_VOIDP   4
357#endif
358
359/* XXX These simply don't belong here, perhaps in apr_portable.h
360 * based on some APR_HAVE_PID/GID/UID?
361 */
362typedef  int         pid_t;
363typedef  int         uid_t;
364typedef  int         gid_t;
365
366/* Mechanisms to properly type numeric literals */
367
368#define APR_INT64_C(val) (val##i64)
369#define APR_UINT64_C(val) (val##Ui64)
370
371
372#if APR_HAVE_IPV6
373
374/* Appears in later flavors, not the originals. */
375#ifndef in_addr6
376#define  in6_addr    in_addr6
377#endif
378
379#ifndef WS2TCPIP_INLINE
380#define IN6_IS_ADDR_V4MAPPED(a) \
381    (   (*(const apr_uint64_t *)(const void *)(&(a)->s6_addr[0]) == 0) \
382     && (*(const apr_uint32_t *)(const void *)(&(a)->s6_addr[8]) == ntohl(0x0000ffff)))
383#endif
384
385#endif /* APR_HAS_IPV6 */
386
387/* Definitions that APR programs need to work properly. */
388
389/**
390 * Thread callbacks from APR functions must be declared with APR_THREAD_FUNC,
391 * so that they follow the platform's calling convention.
392 * @example
393 */
394/** void* APR_THREAD_FUNC my_thread_entry_fn(apr_thread_t *thd, void *data);
395 */
396#define APR_THREAD_FUNC  __stdcall
397
398
399#if defined(DOXYGEN) || !defined(WIN32)
400
401/**
402 * The public APR functions are declared with APR_DECLARE(), so they may
403 * use the most appropriate calling convention.  Public APR functions with
404 * variable arguments must use APR_DECLARE_NONSTD().
405 *
406 * @remark Both the declaration and implementations must use the same macro.
407 * @example
408 */
409/** APR_DECLARE(rettype) apr_func(args)
410 * @see APR_DECLARE_NONSTD @see APR_DECLARE_DATA
411 * @remark Note that when APR compiles the library itself, it passes the
412 * symbol -DAPR_DECLARE_EXPORT to the compiler on some platforms (e.g. Win32)
413 * to export public symbols from the dynamic library build.\n
414 * The user must define the APR_DECLARE_STATIC when compiling to target
415 * the static APR library on some platforms (e.g. Win32.)  The public symbols
416 * are neither exported nor imported when APR_DECLARE_STATIC is defined.\n
417 * By default, compiling an application and including the APR public
418 * headers, without defining APR_DECLARE_STATIC, will prepare the code to be
419 * linked to the dynamic library.
420 */
421#define APR_DECLARE(type)            type
422
423/**
424 * The public APR functions using variable arguments are declared with
425 * APR_DECLARE_NONSTD(), as they must follow the C language calling convention.
426 * @see APR_DECLARE @see APR_DECLARE_DATA
427 * @remark Both the declaration and implementations must use the same macro.
428 * @example
429 */
430/** APR_DECLARE_NONSTD(rettype) apr_func(args, ...);
431 */
432#define APR_DECLARE_NONSTD(type)     type
433
434/**
435 * The public APR variables are declared with AP_MODULE_DECLARE_DATA.
436 * This assures the appropriate indirection is invoked at compile time.
437 * @see APR_DECLARE @see APR_DECLARE_NONSTD
438 * @remark Note that the declaration and implementations use different forms,
439 * but both must include the macro.
440 * @example
441 */
442/** extern APR_DECLARE_DATA type apr_variable;\n
443 * APR_DECLARE_DATA type apr_variable = value;
444 */
445#define APR_DECLARE_DATA
446
447#elif defined(APR_DECLARE_STATIC)
448#define APR_DECLARE(type)            type __stdcall
449#define APR_DECLARE_NONSTD(type)     type __cdecl
450#define APR_DECLARE_DATA
451#elif defined(APR_DECLARE_EXPORT)
452#define APR_DECLARE(type)            __declspec(dllexport) type __stdcall
453#define APR_DECLARE_NONSTD(type)     __declspec(dllexport) type __cdecl
454#define APR_DECLARE_DATA             __declspec(dllexport)
455#else
456#define APR_DECLARE(type)            __declspec(dllimport) type __stdcall
457#define APR_DECLARE_NONSTD(type)     __declspec(dllimport) type __cdecl
458#define APR_DECLARE_DATA             __declspec(dllimport)
459#endif
460
461#ifdef WIN64
462#define APR_SSIZE_T_FMT          "I64d"
463#define APR_SIZE_T_FMT           "I64d"
464#else
465#define APR_SSIZE_T_FMT          "d"
466#define APR_SIZE_T_FMT           "d"
467#endif
468
469#if APR_HAS_LARGE_FILES
470#define APR_OFF_T_FMT            "I64d"
471#else
472#define APR_OFF_T_FMT            "d"
473#endif
474
475#define APR_PID_T_FMT            "d"
476
477#define APR_INT64_T_FMT          "I64d"
478#define APR_UINT64_T_FMT         "I64u"
479#define APR_UINT64_T_HEX_FMT     "I64x"
480
481/* Local machine definition for console and log output. */
482#define APR_EOL_STR              "\r\n"
483
484/* No difference between PROC and GLOBAL mutex */
485#define APR_PROC_MUTEX_IS_GLOBAL      1
486
487typedef int apr_wait_t;
488
489/* struct iovec is needed to emulate Unix writev */
490struct iovec {
491    char*      iov_base;
492    apr_size_t iov_len;
493};
494
495/* Nasty Win32 .h ommissions we really need */
496#define STDIN_FILENO  0
497#define STDOUT_FILENO 1
498#define STDERR_FILENO 2
499
500#if APR_HAS_UNICODE_FS
501/* An arbitrary size that is digestable. True max is a bit less than 32000 */
502#define APR_PATH_MAX 8192
503#else /* !APR_HAS_UNICODE_FS */
504#define APR_PATH_MAX MAX_PATH
505#endif
506
507/** @} */
508
509#ifdef __cplusplus
510}
511#endif
512
513/* Done with badly written headers
514 */
515#if defined(_MSC_VER) && _MSC_VER >= 1200
516#pragma warning(pop)
517#pragma warning(disable: 4996)
518#endif
519
520#endif /* WIN32 */
521
522#endif /* APR_H */
523