1266733Speter/* Licensed to the Apache Software Foundation (ASF) under one or more
2266733Speter * contributor license agreements.  See the NOTICE file distributed with
3266733Speter * this work for additional information regarding copyright ownership.
4266733Speter * The ASF licenses this file to You under the Apache License, Version 2.0
5266733Speter * (the "License"); you may not use this file except in compliance with
6266733Speter * the License.  You may obtain a copy of the License at
7266733Speter *
8266733Speter *     http://www.apache.org/licenses/LICENSE-2.0
9266733Speter *
10266733Speter * Unless required by applicable law or agreed to in writing, software
11266733Speter * distributed under the License is distributed on an "AS IS" BASIS,
12266733Speter * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13266733Speter * See the License for the specific language governing permissions and
14266733Speter * limitations under the License.
15266733Speter */
16266733Speter
17266733Speter
18266733Speter#ifndef APR_H
19266733Speter#define APR_H
20266733Speter
21266733Speter/* GENERATED FILE WARNING!  DO NOT EDIT apr.h
22266733Speter *
23266733Speter * You must modify apr.hwc instead.
24266733Speter *
25266733Speter * And please, make an effort to stub apr.hnw and apr.h.in in the process.
26266733Speter *
27266733Speter * This is the Win32 specific version of apr.h.  It is copied from
28362181Sdim * apr.hw by the apr.dsp and libapr.dsp projects.
29266733Speter */
30266733Speter
31266733Speter/**
32266733Speter * @file apr.h
33266733Speter * @brief APR Platform Definitions
34266733Speter * @remark This is a generated header generated from include/apr.h.in by
35266733Speter * ./configure, or copied from include/apr.hw or include/apr.hnw 
36266733Speter * for Win32 or Netware by those build environments, respectively.
37266733Speter */
38266733Speter
39266733Speter/* Make sure we have our platform identifier macro defined we ask for later.
40266733Speter */
41266733Speter#if defined(_WIN32) && !defined(WIN32)
42266733Speter#define WIN32 1
43266733Speter#endif
44266733Speter
45266733Speter#if defined(WIN32) || defined(DOXYGEN)
46266733Speter
47266733Speter/* Ignore most warnings (back down to /W3) for poorly constructed headers
48266733Speter */
49266733Speter#if defined(_MSC_VER) && _MSC_VER >= 1200
50266733Speter#pragma warning(push, 3)
51266733Speter#endif
52266733Speter
53266733Speter/* disable or reduce the frequency of...
54266733Speter *   C4057: indirection to slightly different base types
55266733Speter *   C4075: slight indirection changes (unsigned short* vs short[])
56266733Speter *   C4100: unreferenced formal parameter
57266733Speter *   C4127: conditional expression is constant
58266733Speter *   C4163: '_rotl64' : not available as an intrinsic function
59266733Speter *   C4201: nonstandard extension nameless struct/unions
60266733Speter *   C4244: int to char/short - precision loss
61266733Speter *   C4514: unreferenced inline function removed
62266733Speter */
63362181Sdim#if defined(_MSC_VER)
64266733Speter#pragma warning(disable: 4100 4127 4163 4201 4514; once: 4057 4075 4244)
65362181Sdim#endif
66266733Speter
67266733Speter/* Ignore Microsoft's interpretation of secure development
68266733Speter * and the POSIX string handling API
69266733Speter */
70266733Speter#if defined(_MSC_VER) && _MSC_VER >= 1400
71266733Speter#ifndef _CRT_SECURE_NO_DEPRECATE
72266733Speter#define _CRT_SECURE_NO_DEPRECATE
73266733Speter#endif
74266733Speter#pragma warning(disable: 4996)
75266733Speter#endif
76266733Speter
77266733Speter/* Has windows.h already been included?  If so, our preferences don't matter,
78266733Speter * but we will still need the winsock things no matter what was included.
79266733Speter * If not, include a restricted set of windows headers to our tastes.
80266733Speter */
81266733Speter#ifndef _WINDOWS_
82266733Speter#ifndef WIN32_LEAN_AND_MEAN
83266733Speter#define WIN32_LEAN_AND_MEAN
84266733Speter#endif
85266733Speter#ifndef _WIN32_WINNT
86266733Speter#define _WIN32_WINNT @win32_winnt_str@
87266733Speter#endif
88266733Speter#ifndef NOUSER
89266733Speter#define NOUSER
90266733Speter#endif
91266733Speter#ifndef NOMCX
92266733Speter#define NOMCX
93266733Speter#endif
94266733Speter#ifndef NOIME
95266733Speter#define NOIME
96266733Speter#endif
97266733Speter#include <windows.h>
98266733Speter/* 
99266733Speter * Add a _very_few_ declarations missing from the restricted set of headers
100266733Speter * (If this list becomes extensive, re-enable the required headers above!)
101266733Speter * winsock headers were excluded by WIN32_LEAN_AND_MEAN, so include them now
102266733Speter */
103266733Speter#define SW_HIDE             0
104266733Speter#ifndef _WIN32_WCE
105266733Speter#include <winsock2.h>
106266733Speter#include <ws2tcpip.h>
107266733Speter#include <mswsock.h>
108266733Speter#else
109266733Speter#include <winsock.h>
110266733Speter#endif
111266733Speter#endif /* !_WINDOWS_ */
112266733Speter
113266733Speter/**
114266733Speter * @defgroup APR Apache Portability Runtime library
115266733Speter * @{
116266733Speter */
117266733Speter/**
118266733Speter * @defgroup apr_platform Platform Definitions
119266733Speter * @{
120266733Speter * @warning
121266733Speter * <strong><em>The actual values of macros and typedefs on this page<br>
122266733Speter * are platform specific and should NOT be relied upon!</em></strong>
123266733Speter */
124266733Speter
125266733Speter#define APR_INLINE __inline
126266733Speter#define APR_HAS_INLINE          1
127266733Speter#if !defined(__GNUC__) && !defined(__attribute__)
128266733Speter#define __attribute__(__x)
129266733Speter#endif
130266733Speter
131266733Speter#ifndef _WIN32_WCE
132266733Speter#define APR_HAVE_ARPA_INET_H    0
133266733Speter#define APR_HAVE_CONIO_H        1
134266733Speter#define APR_HAVE_CRYPT_H        0
135266733Speter#define APR_HAVE_CTYPE_H        1
136266733Speter#define APR_HAVE_DIRENT_H       0
137266733Speter#define APR_HAVE_ERRNO_H        1
138266733Speter#define APR_HAVE_FCNTL_H        1
139266733Speter#define APR_HAVE_IO_H           1
140266733Speter#define APR_HAVE_LIMITS_H       1
141266733Speter#define APR_HAVE_NETDB_H        0
142266733Speter#define APR_HAVE_NETINET_IN_H   0
143266733Speter#define APR_HAVE_NETINET_SCTP_H 0
144266733Speter#define APR_HAVE_NETINET_SCTP_UIO_H 0
145266733Speter#define APR_HAVE_NETINET_TCP_H  0
146266733Speter#define APR_HAVE_PTHREAD_H      0
147266733Speter#define APR_HAVE_SEMAPHORE_H    0
148266733Speter#define APR_HAVE_SIGNAL_H       1
149266733Speter#define APR_HAVE_STDARG_H       1
150266733Speter#define APR_HAVE_STDINT_H       0
151266733Speter#define APR_HAVE_STDIO_H        1
152266733Speter#define APR_HAVE_STDLIB_H       1
153266733Speter#define APR_HAVE_STRING_H       1
154266733Speter#define APR_HAVE_STRINGS_H      0
155266733Speter#define APR_HAVE_SYS_IOCTL_H    0
156266733Speter#define APR_HAVE_SYS_SENDFILE_H 0
157266733Speter#define APR_HAVE_SYS_SIGNAL_H   0
158266733Speter#define APR_HAVE_SYS_SOCKET_H   0
159266733Speter#define APR_HAVE_SYS_SOCKIO_H   0
160266733Speter#define APR_HAVE_SYS_SYSLIMITS_H 0
161266733Speter#define APR_HAVE_SYS_TIME_H     0
162266733Speter#define APR_HAVE_SYS_TYPES_H    1
163266733Speter#define APR_HAVE_SYS_UIO_H      0
164266733Speter#define APR_HAVE_SYS_UN_H       0
165266733Speter#define APR_HAVE_SYS_WAIT_H     0
166266733Speter#define APR_HAVE_TIME_H         1
167266733Speter#define APR_HAVE_UNISTD_H       0
168266733Speter#define APR_HAVE_STDDEF_H       1
169266733Speter#define APR_HAVE_PROCESS_H      1
170266733Speter#else
171266733Speter#define APR_HAVE_ARPA_INET_H    0
172266733Speter#define APR_HAVE_CONIO_H        0
173266733Speter#define APR_HAVE_CRYPT_H        0
174266733Speter#define APR_HAVE_CTYPE_H        0
175266733Speter#define APR_HAVE_DIRENT_H       0
176266733Speter#define APR_HAVE_ERRNO_H        0
177266733Speter#define APR_HAVE_FCNTL_H        0
178266733Speter#define APR_HAVE_IO_H           0
179266733Speter#define APR_HAVE_LIMITS_H       0
180266733Speter#define APR_HAVE_NETDB_H        0
181266733Speter#define APR_HAVE_NETINET_IN_H   0
182266733Speter#define APR_HAVE_NETINET_SCTP_H 0
183266733Speter#define APR_HAVE_NETINET_SCTP_UIO_H 0
184266733Speter#define APR_HAVE_NETINET_TCP_H  0
185266733Speter#define APR_HAVE_PTHREAD_H      0
186266733Speter#define APR_HAVE_SEMAPHORE_H    0
187266733Speter#define APR_HAVE_SIGNAL_H       0
188266733Speter#define APR_HAVE_STDARG_H       0
189266733Speter#define APR_HAVE_STDINT_H       0
190266733Speter#define APR_HAVE_STDIO_H        1
191266733Speter#define APR_HAVE_STDLIB_H       1
192266733Speter#define APR_HAVE_STRING_H       1
193266733Speter#define APR_HAVE_STRINGS_H      0
194266733Speter#define APR_HAVE_SYS_IOCTL_H    0
195266733Speter#define APR_HAVE_SYS_SENDFILE_H 0
196266733Speter#define APR_HAVE_SYS_SIGNAL_H   0
197266733Speter#define APR_HAVE_SYS_SOCKET_H   0
198266733Speter#define APR_HAVE_SYS_SOCKIO_H   0
199266733Speter#define APR_HAVE_SYS_SYSLIMITS_H 0
200266733Speter#define APR_HAVE_SYS_TIME_H     0
201266733Speter#define APR_HAVE_SYS_TYPES_H    0
202266733Speter#define APR_HAVE_SYS_UIO_H      0
203266733Speter#define APR_HAVE_SYS_UN_H       0
204266733Speter#define APR_HAVE_SYS_WAIT_H     0
205266733Speter#define APR_HAVE_TIME_H         0
206266733Speter#define APR_HAVE_UNISTD_H       0
207266733Speter#define APR_HAVE_STDDEF_H       0
208266733Speter#define APR_HAVE_PROCESS_H      0
209266733Speter#endif
210266733Speter
211266733Speter/** @} */
212266733Speter/** @} */
213266733Speter
214362181Sdim/* We don't include our conditional headers within the doxyblocks
215362181Sdim * or the extern "C" namespace
216266733Speter */
217266733Speter
218266733Speter#if APR_HAVE_STDLIB_H
219266733Speter#include <stdlib.h>
220266733Speter#endif
221362181Sdim
222266733Speter#if APR_HAVE_STDIO_H
223266733Speter#include <stdio.h>
224266733Speter#endif
225362181Sdim
226266733Speter#if APR_HAVE_SYS_TYPES_H
227266733Speter#include <sys/types.h>
228266733Speter#endif
229362181Sdim
230266733Speter#if APR_HAVE_STDDEF_H
231266733Speter#include <stddef.h>
232266733Speter#endif
233362181Sdim
234362181Sdim#if APR_HAVE_SYS_SOCKET_H
235362181Sdim#include <sys/socket.h>
236362181Sdim#endif
237362181Sdim
238362181Sdim#if APR_HAVE_STDINT_H
239362181Sdim#include <stdint.h>
240362181Sdim#endif
241362181Sdim
242362181Sdim#if APR_HAVE_SYS_WAIT_H
243362181Sdim#include <sys/wait.h>
244362181Sdim#endif
245362181Sdim
246266733Speter#if APR_HAVE_TIME_H
247266733Speter#include <time.h>
248266733Speter#endif
249362181Sdim
250266733Speter#if APR_HAVE_PROCESS_H
251266733Speter#include <process.h>
252266733Speter#endif
253266733Speter
254266733Speter#ifdef __cplusplus
255266733Speterextern "C" {
256266733Speter#endif
257266733Speter
258266733Speter/**
259266733Speter * @addtogroup apr_platform
260266733Speter * @ingroup APR 
261266733Speter * @{
262266733Speter */
263266733Speter
264266733Speter#define APR_HAVE_SHMEM_MMAP_TMP     0
265266733Speter#define APR_HAVE_SHMEM_MMAP_SHM     0
266266733Speter#define APR_HAVE_SHMEM_MMAP_ZERO    0
267266733Speter#define APR_HAVE_SHMEM_SHMGET_ANON  0
268266733Speter#define APR_HAVE_SHMEM_SHMGET       0
269266733Speter#define APR_HAVE_SHMEM_MMAP_ANON    0
270266733Speter#define APR_HAVE_SHMEM_BEOS         0
271266733Speter
272266733Speter#define APR_USE_SHMEM_MMAP_TMP     0
273266733Speter#define APR_USE_SHMEM_MMAP_SHM     0
274266733Speter#define APR_USE_SHMEM_MMAP_ZERO    0
275266733Speter#define APR_USE_SHMEM_SHMGET_ANON  0
276266733Speter#define APR_USE_SHMEM_SHMGET       0
277266733Speter#define APR_USE_SHMEM_MMAP_ANON    0
278266733Speter#define APR_USE_SHMEM_BEOS         0
279266733Speter
280362181Sdim#define APR_USE_FLOCK_SERIALIZE           0
281266733Speter#define APR_USE_POSIXSEM_SERIALIZE        0
282266733Speter#define APR_USE_SYSVSEM_SERIALIZE         0
283266733Speter#define APR_USE_FCNTL_SERIALIZE           0
284362181Sdim#define APR_USE_PROC_PTHREAD_SERIALIZE    0
285362181Sdim#define APR_USE_PTHREAD_SERIALIZE         0
286266733Speter
287266733Speter#define APR_HAS_FLOCK_SERIALIZE           0
288266733Speter#define APR_HAS_SYSVSEM_SERIALIZE         0
289266733Speter#define APR_HAS_POSIXSEM_SERIALIZE        0
290266733Speter#define APR_HAS_FCNTL_SERIALIZE           0
291266733Speter#define APR_HAS_PROC_PTHREAD_SERIALIZE    0
292266733Speter
293266733Speter#define APR_PROCESS_LOCK_IS_GLOBAL        0
294266733Speter
295266733Speter#define APR_HAVE_CORKABLE_TCP   0
296266733Speter#define APR_HAVE_GETRLIMIT      0
297266733Speter#define APR_HAVE_ICONV          0
298266733Speter#define APR_HAVE_IN_ADDR        1
299266733Speter#define APR_HAVE_INET_ADDR      1
300266733Speter#define APR_HAVE_INET_NETWORK   0
301266733Speter#define APR_HAVE_IPV6           @apr_have_ipv6_10@
302362181Sdim#define APR_HAVE_SOCKADDR_UN    0
303266733Speter#define APR_HAVE_MEMMOVE        1
304266733Speter#define APR_HAVE_SETRLIMIT      0
305266733Speter#define APR_HAVE_SIGACTION      0
306266733Speter#define APR_HAVE_SIGSUSPEND     0
307266733Speter#define APR_HAVE_SIGWAIT        0
308266733Speter#define APR_HAVE_SA_STORAGE     0
309266733Speter#define APR_HAVE_STRCASECMP     0
310266733Speter#define APR_HAVE_STRDUP         1
311266733Speter#define APR_HAVE_STRNCASECMP    0
312266733Speter#define APR_HAVE_STRSTR         1
313266733Speter#define APR_HAVE_MEMCHR         1
314266733Speter#define APR_HAVE_STRUCT_RLIMIT  0
315266733Speter#define APR_HAVE_UNION_SEMUN    0
316266733Speter#define APR_HAVE_SCTP           0
317266733Speter#define APR_HAVE_IOVEC          0
318266733Speter
319266733Speter#ifndef _WIN32_WCE
320266733Speter#define APR_HAVE_STRICMP        1
321266733Speter#define APR_HAVE_STRNICMP       1
322266733Speter#else
323266733Speter#define APR_HAVE_STRICMP        0
324266733Speter#define APR_HAVE_STRNICMP       0
325266733Speter#endif
326266733Speter
327266733Speter/*  APR Feature Macros */
328266733Speter#define APR_HAS_SHARED_MEMORY     1
329266733Speter#define APR_HAS_THREADS           1
330266733Speter#define APR_HAS_MMAP              1
331266733Speter#define APR_HAS_FORK              0
332266733Speter#define APR_HAS_RANDOM            1
333266733Speter#define APR_HAS_OTHER_CHILD       1
334266733Speter#define APR_HAS_DSO               1
335266733Speter#define APR_HAS_SO_ACCEPTFILTER   0
336266733Speter#define APR_HAS_UNICODE_FS        1
337266733Speter#define APR_HAS_PROC_INVOKED      1
338266733Speter#define APR_HAS_OS_UUID           1
339362181Sdim#define APR_HAS_TIMEDLOCKS        1
340266733Speter
341266733Speter#ifndef _WIN32_WCE
342266733Speter#define APR_HAS_SENDFILE          1
343266733Speter#define APR_HAS_USER              1
344266733Speter#define APR_HAS_LARGE_FILES       1
345266733Speter#define APR_HAS_XTHREAD_FILES     1
346266733Speter#define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD 1
347266733Speter#else
348266733Speter#define APR_HAS_SENDFILE          0
349266733Speter#define APR_HAS_USER              0
350266733Speter#define APR_HAS_LARGE_FILES       0
351266733Speter#define APR_HAS_XTHREAD_FILES     0
352266733Speter#define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD 0
353266733Speter#endif
354266733Speter
355266733Speter/* APR sets APR_FILES_AS_SOCKETS to 1 on systems where it is possible
356266733Speter * to poll on files/pipes.
357266733Speter */
358266733Speter#define APR_FILES_AS_SOCKETS      0
359266733Speter
360266733Speter/* This macro indicates whether or not EBCDIC is the native character set.
361266733Speter */
362266733Speter#define APR_CHARSET_EBCDIC        0
363266733Speter
364266733Speter/* If we have a TCP implementation that can be "corked", what flag
365266733Speter * do we use?
366266733Speter */
367266733Speter#define APR_TCP_NOPUSH_FLAG       @apr_tcp_nopush_flag@
368266733Speter
369266733Speter/* Is the TCP_NODELAY socket option inherited from listening sockets?
370266733Speter */
371266733Speter#define APR_TCP_NODELAY_INHERITED 1
372266733Speter
373266733Speter/* Is the O_NONBLOCK flag inherited from listening sockets?
374266733Speter */
375362181Sdim#define APR_O_NONBLOCK_INHERITED 1
376266733Speter
377266733Speter/* Typedefs that APR needs. */
378266733Speter
379266733Spetertypedef  unsigned char     apr_byte_t;
380266733Speter
381266733Spetertypedef  short             apr_int16_t;
382266733Spetertypedef  unsigned short    apr_uint16_t;
383266733Speter
384266733Spetertypedef  int               apr_int32_t;
385266733Spetertypedef  unsigned int      apr_uint32_t;
386266733Speter
387266733Spetertypedef  __int64           apr_int64_t;
388266733Spetertypedef  unsigned __int64  apr_uint64_t;
389266733Speter
390266733Spetertypedef  size_t      apr_size_t;
391266733Speter#if APR_HAVE_STDDEF_H
392266733Spetertypedef  ptrdiff_t   apr_ssize_t;
393266733Speter#else
394266733Spetertypedef  int         apr_ssize_t;
395266733Speter#endif
396266733Speter#if APR_HAS_LARGE_FILES
397266733Spetertypedef  __int64     apr_off_t;
398266733Speter#else
399266733Spetertypedef  int         apr_off_t;
400266733Speter#endif
401266733Spetertypedef  int         apr_socklen_t;
402266733Spetertypedef  apr_uint64_t      apr_ino_t;
403266733Speter
404266733Speter#ifdef _WIN64
405266733Speter#define APR_SIZEOF_VOIDP   8
406266733Speter#else
407266733Speter#define APR_SIZEOF_VOIDP   4
408266733Speter#endif
409266733Speter
410266733Speter#if APR_SIZEOF_VOIDP == 8
411266733Spetertypedef  apr_uint64_t            apr_uintptr_t;
412266733Speter#else
413266733Spetertypedef  apr_uint32_t            apr_uintptr_t;
414266733Speter#endif
415266733Speter
416266733Speter/* Are we big endian? */
417266733Speter/* XXX: Fatal assumption on Alpha platforms */
418266733Speter#define APR_IS_BIGENDIAN	0
419266733Speter
420266733Speter/* Mechanisms to properly type numeric literals */
421266733Speter
422266733Speter#ifndef __GNUC__
423266733Speter#define APR_INT64_C(val) (val##i64)
424266733Speter#define APR_UINT64_C(val) (val##Ui64)
425266733Speter#else
426266733Speter#define APR_INT64_C(val) (val##LL)
427266733Speter#define APR_UINT64_C(val) (val##ULL)
428266733Speter#endif
429266733Speter
430266733Speter#ifdef INT16_MIN
431266733Speter#define APR_INT16_MIN   INT16_MIN
432266733Speter#else
433266733Speter#define APR_INT16_MIN   (-0x7fff - 1)
434266733Speter#endif
435266733Speter
436266733Speter#ifdef INT16_MAX
437266733Speter#define APR_INT16_MAX  INT16_MAX
438266733Speter#else
439266733Speter#define APR_INT16_MAX   (0x7fff)
440266733Speter#endif
441266733Speter
442266733Speter#ifdef UINT16_MAX
443266733Speter#define APR_UINT16_MAX  UINT16_MAX
444266733Speter#else
445266733Speter#define APR_UINT16_MAX  (0xffff)
446266733Speter#endif
447266733Speter
448266733Speter#ifdef INT32_MIN
449266733Speter#define APR_INT32_MIN   INT32_MIN
450266733Speter#else
451266733Speter#define APR_INT32_MIN   (-0x7fffffff - 1)
452266733Speter#endif
453266733Speter
454266733Speter#ifdef INT32_MAX
455266733Speter#define APR_INT32_MAX  INT32_MAX
456266733Speter#else
457266733Speter#define APR_INT32_MAX  0x7fffffff
458266733Speter#endif
459266733Speter
460266733Speter#ifdef UINT32_MAX
461266733Speter#define APR_UINT32_MAX  UINT32_MAX
462266733Speter#else
463266733Speter#define APR_UINT32_MAX  (0xffffffffU)
464266733Speter#endif
465266733Speter
466266733Speter#ifdef INT64_MIN
467266733Speter#define APR_INT64_MIN   INT64_MIN
468266733Speter#else
469266733Speter#define APR_INT64_MIN   (APR_INT64_C(-0x7fffffffffffffff) - 1)
470266733Speter#endif
471266733Speter
472266733Speter#ifdef INT64_MAX
473266733Speter#define APR_INT64_MAX   INT64_MAX
474266733Speter#else
475266733Speter#define APR_INT64_MAX   APR_INT64_C(0x7fffffffffffffff)
476266733Speter#endif
477266733Speter
478266733Speter#ifdef UINT64_MAX
479266733Speter#define APR_UINT64_MAX  UINT64_MAX
480266733Speter#else
481266733Speter#define APR_UINT64_MAX  APR_UINT64_C(0xffffffffffffffff)
482266733Speter#endif
483266733Speter
484266733Speter#define APR_SIZE_MAX    (~((apr_size_t)0))
485266733Speter
486266733Speter/* Definitions that APR programs need to work properly. */
487266733Speter
488266733Speter/**
489266733Speter * APR public API wrap for C++ compilers.
490266733Speter */
491266733Speter#ifdef __cplusplus
492266733Speter#define APR_BEGIN_DECLS     extern "C" {
493266733Speter#define APR_END_DECLS       }
494266733Speter#else
495266733Speter#define APR_BEGIN_DECLS
496266733Speter#define APR_END_DECLS
497266733Speter#endif
498266733Speter
499266733Speter/** 
500266733Speter * Thread callbacks from APR functions must be declared with APR_THREAD_FUNC, 
501266733Speter * so that they follow the platform's calling convention.
502266733Speter * <PRE>
503266733Speter *
504266733Speter * void* APR_THREAD_FUNC my_thread_entry_fn(apr_thread_t *thd, void *data);
505266733Speter *
506266733Speter * </PRE>
507266733Speter */
508266733Speter#define APR_THREAD_FUNC  __stdcall
509266733Speter
510266733Speter
511266733Speter#if defined(DOXYGEN) || !defined(WIN32)
512266733Speter
513266733Speter/**
514266733Speter * The public APR functions are declared with APR_DECLARE(), so they may
515266733Speter * use the most appropriate calling convention.  Public APR functions with 
516266733Speter * variable arguments must use APR_DECLARE_NONSTD().
517266733Speter *
518266733Speter * @remark Both the declaration and implementations must use the same macro.
519266733Speter *
520266733Speter * <PRE>
521266733Speter * APR_DECLARE(rettype) apr_func(args)
522266733Speter * </PRE>
523266733Speter * @see APR_DECLARE_NONSTD @see APR_DECLARE_DATA
524266733Speter * @remark Note that when APR compiles the library itself, it passes the 
525266733Speter * symbol -DAPR_DECLARE_EXPORT to the compiler on some platforms (e.g. Win32) 
526266733Speter * to export public symbols from the dynamic library build.\n
527266733Speter * The user must define the APR_DECLARE_STATIC when compiling to target
528266733Speter * the static APR library on some platforms (e.g. Win32.)  The public symbols 
529266733Speter * are neither exported nor imported when APR_DECLARE_STATIC is defined.\n
530266733Speter * By default, compiling an application and including the APR public
531266733Speter * headers, without defining APR_DECLARE_STATIC, will prepare the code to be
532266733Speter * linked to the dynamic library.
533266733Speter */
534266733Speter#define APR_DECLARE(type)            type 
535266733Speter
536266733Speter/**
537266733Speter * The public APR functions using variable arguments are declared with 
538266733Speter * APR_DECLARE_NONSTD(), as they must follow the C language calling convention.
539266733Speter * @see APR_DECLARE @see APR_DECLARE_DATA
540266733Speter * @remark Both the declaration and implementations must use the same macro.
541266733Speter * <PRE>
542266733Speter *
543266733Speter * APR_DECLARE_NONSTD(rettype) apr_func(args, ...);
544266733Speter *
545266733Speter * </PRE>
546266733Speter */
547266733Speter#define APR_DECLARE_NONSTD(type)     type
548266733Speter
549266733Speter/**
550266733Speter * The public APR variables are declared with AP_MODULE_DECLARE_DATA.
551266733Speter * This assures the appropriate indirection is invoked at compile time.
552266733Speter * @see APR_DECLARE @see APR_DECLARE_NONSTD
553266733Speter * @remark Note that the declaration and implementations use different forms,
554266733Speter * but both must include the macro.
555266733Speter * 
556266733Speter * <PRE>
557266733Speter *
558266733Speter * extern APR_DECLARE_DATA type apr_variable;\n
559266733Speter * APR_DECLARE_DATA type apr_variable = value;
560266733Speter *
561266733Speter * </PRE>
562266733Speter */
563266733Speter#define APR_DECLARE_DATA
564266733Speter
565266733Speter#elif defined(APR_DECLARE_STATIC)
566266733Speter#define APR_DECLARE(type)            type __stdcall
567266733Speter#define APR_DECLARE_NONSTD(type)     type __cdecl
568266733Speter#define APR_DECLARE_DATA
569266733Speter#elif defined(APR_DECLARE_EXPORT)
570266733Speter#define APR_DECLARE(type)            __declspec(dllexport) type __stdcall
571266733Speter#define APR_DECLARE_NONSTD(type)     __declspec(dllexport) type __cdecl
572266733Speter#define APR_DECLARE_DATA             __declspec(dllexport)
573266733Speter#else
574266733Speter#define APR_DECLARE(type)            __declspec(dllimport) type __stdcall
575266733Speter#define APR_DECLARE_NONSTD(type)     __declspec(dllimport) type __cdecl
576266733Speter#define APR_DECLARE_DATA             __declspec(dllimport)
577266733Speter#endif
578266733Speter
579266733Speter#ifdef _WIN64
580266733Speter#define APR_SSIZE_T_FMT          "I64d"
581266733Speter#define APR_SIZE_T_FMT           "I64u"
582266733Speter#else
583266733Speter#define APR_SSIZE_T_FMT          "d"
584266733Speter#define APR_SIZE_T_FMT           "u"
585266733Speter#endif
586266733Speter
587266733Speter#if APR_HAS_LARGE_FILES
588266733Speter#define APR_OFF_T_FMT            "I64d"
589266733Speter#else
590266733Speter#define APR_OFF_T_FMT            "d"
591266733Speter#endif
592266733Speter
593266733Speter#define APR_PID_T_FMT            "d"
594266733Speter
595266733Speter#define APR_INT64_T_FMT          "I64d"
596266733Speter#define APR_UINT64_T_FMT         "I64u"
597266733Speter#define APR_UINT64_T_HEX_FMT     "I64x"
598266733Speter
599266733Speter/* No difference between PROC and GLOBAL mutex */
600266733Speter#define APR_PROC_MUTEX_IS_GLOBAL      1
601266733Speter
602266733Speter/* Local machine definition for console and log output. */
603266733Speter#define APR_EOL_STR              "\r\n"
604266733Speter
605266733Spetertypedef int apr_wait_t;
606266733Speter
607266733Speter#if APR_HAS_UNICODE_FS
608266733Speter/* An arbitrary size that is digestable. True max is a bit less than 32000 */
609266733Speter#define APR_PATH_MAX 8192
610266733Speter#else /* !APR_HAS_UNICODE_FS */
611266733Speter#define APR_PATH_MAX MAX_PATH
612266733Speter#endif
613266733Speter
614266733Speter#define APR_DSOPATH "PATH"
615266733Speter
616266733Speter/** @} */
617266733Speter
618266733Speter/* Definitions that only Win32 programs need to compile properly. */
619266733Speter
620266733Speter/* XXX These simply don't belong here, perhaps in apr_portable.h
621266733Speter * based on some APR_HAVE_PID/GID/UID?
622266733Speter */
623266733Speter#ifndef __GNUC__
624266733Spetertypedef  int         pid_t;
625266733Speter#endif
626266733Spetertypedef  int         uid_t;
627266733Spetertypedef  int         gid_t;
628266733Speter
629266733Speter/* Win32 .h ommissions we really need */
630266733Speter#define STDIN_FILENO  0
631266733Speter#define STDOUT_FILENO 1
632266733Speter#define STDERR_FILENO 2
633266733Speter
634266733Speter#if APR_HAVE_IPV6
635266733Speter
636266733Speter/* Appears in later flavors, not the originals. */
637266733Speter#ifndef in_addr6
638266733Speter#define  in6_addr    in_addr6
639266733Speter#endif
640266733Speter
641266733Speter#ifndef WS2TCPIP_INLINE
642266733Speter#define IN6_IS_ADDR_V4MAPPED(a) \
643266733Speter    (   (*(const apr_uint64_t *)(const void *)(&(a)->s6_addr[0]) == 0) \
644266733Speter     && (*(const apr_uint32_t *)(const void *)(&(a)->s6_addr[8]) == ntohl(0x0000ffff)))
645266733Speter#endif
646266733Speter
647362181Sdim#endif /* APR_HAVE_IPV6 */
648266733Speter
649266733Speter#ifdef __cplusplus
650266733Speter}
651266733Speter#endif
652266733Speter
653362181Sdim/* Done with badly written headers, leave 'deprecated CRT' undeprecated
654266733Speter */
655266733Speter#if defined(_MSC_VER) && _MSC_VER >= 1200
656266733Speter#pragma warning(pop)
657362181Sdim#if _MSC_VER >= 1400
658266733Speter#pragma warning(disable: 4996)
659266733Speter#endif
660362181Sdim#endif
661266733Speter
662266733Speter#endif /* WIN32 */
663266733Speter
664266733Speter#endif /* APR_H */
665