1251875Speter/* Licensed to the Apache Software Foundation (ASF) under one or more
2251875Speter * contributor license agreements.  See the NOTICE file distributed with
3251875Speter * this work for additional information regarding copyright ownership.
4251875Speter * The ASF licenses this file to You under the Apache License, Version 2.0
5251875Speter * (the "License"); you may not use this file except in compliance with
6251875Speter * the License.  You may obtain a copy of the License at
7251875Speter *
8251875Speter *     http://www.apache.org/licenses/LICENSE-2.0
9251875Speter *
10251875Speter * Unless required by applicable law or agreed to in writing, software
11251875Speter * distributed under the License is distributed on an "AS IS" BASIS,
12251875Speter * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13251875Speter * See the License for the specific language governing permissions and
14251875Speter * limitations under the License.
15251875Speter */
16251875Speter
17251875Speter
18251875Speter#ifndef APR_H
19251875Speter#define APR_H
20251875Speter
21251875Speter/* GENERATED FILE WARNING!  DO NOT EDIT apr.h
22251875Speter *
23251875Speter * You must modify apr.hw instead.
24251875Speter *
25251875Speter * And please, make an effort to stub apr.hnw and apr.h.in in the process.
26251875Speter *
27251875Speter * This is the Win32 specific version of apr.h.  It is copied from
28362181Sdim * apr.hw by the apr.dsp and libapr.dsp projects.
29251875Speter */
30251875Speter
31251875Speter/**
32251875Speter * @file apr.h
33251875Speter * @brief APR Platform Definitions
34251875Speter * @remark This is a generated header generated from include/apr.h.in by
35251875Speter * ./configure, or copied from include/apr.hw or include/apr.hnw 
36251875Speter * for Win32 or Netware by those build environments, respectively.
37251875Speter */
38251875Speter
39253734Speter/* Make sure we have our platform identifier macro defined we ask for later.
40253734Speter */
41253734Speter#if defined(_WIN32) && !defined(WIN32)
42253734Speter#define WIN32 1
43253734Speter#endif
44253734Speter
45251875Speter#if defined(WIN32) || defined(DOXYGEN)
46251875Speter
47251875Speter/* Ignore most warnings (back down to /W3) for poorly constructed headers
48251875Speter */
49251875Speter#if defined(_MSC_VER) && _MSC_VER >= 1200
50251875Speter#pragma warning(push, 3)
51251875Speter#endif
52251875Speter
53251875Speter/* disable or reduce the frequency of...
54251875Speter *   C4057: indirection to slightly different base types
55251875Speter *   C4075: slight indirection changes (unsigned short* vs short[])
56251875Speter *   C4100: unreferenced formal parameter
57251875Speter *   C4127: conditional expression is constant
58251875Speter *   C4163: '_rotl64' : not available as an intrinsic function
59251875Speter *   C4201: nonstandard extension nameless struct/unions
60251875Speter *   C4244: int to char/short - precision loss
61251875Speter *   C4514: unreferenced inline function removed
62251875Speter */
63362181Sdim#if defined(_MSC_VER)
64251875Speter#pragma warning(disable: 4100 4127 4163 4201 4514; once: 4057 4075 4244)
65362181Sdim#endif
66251875Speter
67251875Speter/* Ignore Microsoft's interpretation of secure development
68251875Speter * and the POSIX string handling API
69251875Speter */
70251875Speter#if defined(_MSC_VER) && _MSC_VER >= 1400
71251875Speter#ifndef _CRT_SECURE_NO_DEPRECATE
72251875Speter#define _CRT_SECURE_NO_DEPRECATE
73251875Speter#endif
74251875Speter#pragma warning(disable: 4996)
75251875Speter#endif
76251875Speter
77251875Speter/* Has windows.h already been included?  If so, our preferences don't matter,
78251875Speter * but we will still need the winsock things no matter what was included.
79251875Speter * If not, include a restricted set of windows headers to our tastes.
80251875Speter */
81251875Speter#ifndef _WINDOWS_
82251875Speter#ifndef WIN32_LEAN_AND_MEAN
83251875Speter#define WIN32_LEAN_AND_MEAN
84251875Speter#endif
85251875Speter#ifndef _WIN32_WINNT
86251875Speter
87251875Speter/* Restrict the server to a subset of Windows XP header files by default
88251875Speter */
89251875Speter#define _WIN32_WINNT 0x0501
90251875Speter#endif
91251875Speter#ifndef NOUSER
92251875Speter#define NOUSER
93251875Speter#endif
94251875Speter#ifndef NOMCX
95251875Speter#define NOMCX
96251875Speter#endif
97251875Speter#ifndef NOIME
98251875Speter#define NOIME
99251875Speter#endif
100251875Speter#include <windows.h>
101251875Speter/* 
102251875Speter * Add a _very_few_ declarations missing from the restricted set of headers
103251875Speter * (If this list becomes extensive, re-enable the required headers above!)
104251875Speter * winsock headers were excluded by WIN32_LEAN_AND_MEAN, so include them now
105251875Speter */
106251875Speter#define SW_HIDE             0
107251875Speter#ifndef _WIN32_WCE
108251875Speter#include <winsock2.h>
109251875Speter#include <ws2tcpip.h>
110251875Speter#include <mswsock.h>
111251875Speter#else
112251875Speter#include <winsock.h>
113251875Speter#endif
114251875Speter#endif /* !_WINDOWS_ */
115251875Speter
116251875Speter/**
117251875Speter * @defgroup APR Apache Portability Runtime library
118251875Speter * @{
119251875Speter */
120251875Speter/**
121251875Speter * @defgroup apr_platform Platform Definitions
122251875Speter * @{
123251875Speter * @warning
124251875Speter * <strong><em>The actual values of macros and typedefs on this page<br>
125251875Speter * are platform specific and should NOT be relied upon!</em></strong>
126251875Speter */
127251875Speter
128251875Speter#define APR_INLINE __inline
129251875Speter#define APR_HAS_INLINE          1
130251875Speter#if !defined(__GNUC__) && !defined(__attribute__)
131251875Speter#define __attribute__(__x)
132251875Speter#endif
133251875Speter
134251875Speter#ifndef _WIN32_WCE
135251875Speter#define APR_HAVE_ARPA_INET_H    0
136251875Speter#define APR_HAVE_CONIO_H        1
137251875Speter#define APR_HAVE_CRYPT_H        0
138251875Speter#define APR_HAVE_CTYPE_H        1
139251875Speter#define APR_HAVE_DIRENT_H       0
140251875Speter#define APR_HAVE_ERRNO_H        1
141251875Speter#define APR_HAVE_FCNTL_H        1
142251875Speter#define APR_HAVE_IO_H           1
143251875Speter#define APR_HAVE_LIMITS_H       1
144251875Speter#define APR_HAVE_NETDB_H        0
145251875Speter#define APR_HAVE_NETINET_IN_H   0
146251875Speter#define APR_HAVE_NETINET_SCTP_H 0
147251875Speter#define APR_HAVE_NETINET_SCTP_UIO_H 0
148251875Speter#define APR_HAVE_NETINET_TCP_H  0
149251875Speter#define APR_HAVE_PTHREAD_H      0
150251875Speter#define APR_HAVE_SEMAPHORE_H    0
151251875Speter#define APR_HAVE_SIGNAL_H       1
152251875Speter#define APR_HAVE_STDARG_H       1
153251875Speter#define APR_HAVE_STDINT_H       0
154251875Speter#define APR_HAVE_STDIO_H        1
155251875Speter#define APR_HAVE_STDLIB_H       1
156251875Speter#define APR_HAVE_STRING_H       1
157251875Speter#define APR_HAVE_STRINGS_H      0
158251875Speter#define APR_HAVE_SYS_IOCTL_H    0
159251875Speter#define APR_HAVE_SYS_SENDFILE_H 0
160251875Speter#define APR_HAVE_SYS_SIGNAL_H   0
161251875Speter#define APR_HAVE_SYS_SOCKET_H   0
162251875Speter#define APR_HAVE_SYS_SOCKIO_H   0
163251875Speter#define APR_HAVE_SYS_SYSLIMITS_H 0
164251875Speter#define APR_HAVE_SYS_TIME_H     0
165251875Speter#define APR_HAVE_SYS_TYPES_H    1
166251875Speter#define APR_HAVE_SYS_UIO_H      0
167251875Speter#define APR_HAVE_SYS_UN_H       0
168251875Speter#define APR_HAVE_SYS_WAIT_H     0
169251875Speter#define APR_HAVE_TIME_H         1
170251875Speter#define APR_HAVE_UNISTD_H       0
171251875Speter#define APR_HAVE_STDDEF_H       1
172251875Speter#define APR_HAVE_PROCESS_H      1
173251875Speter#else
174251875Speter#define APR_HAVE_ARPA_INET_H    0
175251875Speter#define APR_HAVE_CONIO_H        0
176251875Speter#define APR_HAVE_CRYPT_H        0
177251875Speter#define APR_HAVE_CTYPE_H        0
178251875Speter#define APR_HAVE_DIRENT_H       0
179251875Speter#define APR_HAVE_ERRNO_H        0
180251875Speter#define APR_HAVE_FCNTL_H        0
181251875Speter#define APR_HAVE_IO_H           0
182251875Speter#define APR_HAVE_LIMITS_H       0
183251875Speter#define APR_HAVE_NETDB_H        0
184251875Speter#define APR_HAVE_NETINET_IN_H   0
185251875Speter#define APR_HAVE_NETINET_SCTP_H 0
186251875Speter#define APR_HAVE_NETINET_SCTP_UIO_H 0
187251875Speter#define APR_HAVE_NETINET_TCP_H  0
188251875Speter#define APR_HAVE_PTHREAD_H      0
189251875Speter#define APR_HAVE_SEMAPHORE_H    0
190251875Speter#define APR_HAVE_SIGNAL_H       0
191251875Speter#define APR_HAVE_STDARG_H       0
192251875Speter#define APR_HAVE_STDINT_H       0
193251875Speter#define APR_HAVE_STDIO_H        1
194251875Speter#define APR_HAVE_STDLIB_H       1
195251875Speter#define APR_HAVE_STRING_H       1
196251875Speter#define APR_HAVE_STRINGS_H      0
197251875Speter#define APR_HAVE_SYS_IOCTL_H    0
198251875Speter#define APR_HAVE_SYS_SENDFILE_H 0
199251875Speter#define APR_HAVE_SYS_SIGNAL_H   0
200251875Speter#define APR_HAVE_SYS_SOCKET_H   0
201251875Speter#define APR_HAVE_SYS_SOCKIO_H   0
202251875Speter#define APR_HAVE_SYS_SYSLIMITS_H 0
203251875Speter#define APR_HAVE_SYS_TIME_H     0
204251875Speter#define APR_HAVE_SYS_TYPES_H    0
205251875Speter#define APR_HAVE_SYS_UIO_H      0
206251875Speter#define APR_HAVE_SYS_UN_H       0
207251875Speter#define APR_HAVE_SYS_WAIT_H     0
208251875Speter#define APR_HAVE_TIME_H         0
209251875Speter#define APR_HAVE_UNISTD_H       0
210251875Speter#define APR_HAVE_STDDEF_H       0
211251875Speter#define APR_HAVE_PROCESS_H      0
212251875Speter#endif
213251875Speter
214251875Speter/** @} */
215251875Speter/** @} */
216251875Speter
217362181Sdim/* We don't include our conditional headers within the doxyblocks
218362181Sdim * or the extern "C" namespace
219251875Speter */
220251875Speter
221251875Speter#if APR_HAVE_STDLIB_H
222251875Speter#include <stdlib.h>
223251875Speter#endif
224362181Sdim
225251875Speter#if APR_HAVE_STDIO_H
226251875Speter#include <stdio.h>
227251875Speter#endif
228362181Sdim
229251875Speter#if APR_HAVE_SYS_TYPES_H
230251875Speter#include <sys/types.h>
231251875Speter#endif
232362181Sdim
233251875Speter#if APR_HAVE_STDDEF_H
234251875Speter#include <stddef.h>
235251875Speter#endif
236362181Sdim
237362181Sdim#if APR_HAVE_SYS_SOCKET_H
238362181Sdim#include <sys/socket.h>
239362181Sdim#endif
240362181Sdim
241362181Sdim#if APR_HAVE_STDINT_H
242362181Sdim#include <stdint.h>
243362181Sdim#endif
244362181Sdim
245362181Sdim#if APR_HAVE_SYS_WAIT_H
246362181Sdim#include <sys/wait.h>
247362181Sdim#endif
248362181Sdim
249251875Speter#if APR_HAVE_TIME_H
250251875Speter#include <time.h>
251251875Speter#endif
252362181Sdim
253251875Speter#if APR_HAVE_PROCESS_H
254251875Speter#include <process.h>
255251875Speter#endif
256251875Speter
257251875Speter#ifdef __cplusplus
258251875Speterextern "C" {
259251875Speter#endif
260251875Speter
261251875Speter/**
262251875Speter * @addtogroup apr_platform
263251875Speter * @ingroup APR 
264251875Speter * @{
265251875Speter */
266251875Speter
267251875Speter#define APR_HAVE_SHMEM_MMAP_TMP     0
268251875Speter#define APR_HAVE_SHMEM_MMAP_SHM     0
269251875Speter#define APR_HAVE_SHMEM_MMAP_ZERO    0
270251875Speter#define APR_HAVE_SHMEM_SHMGET_ANON  0
271251875Speter#define APR_HAVE_SHMEM_SHMGET       0
272251875Speter#define APR_HAVE_SHMEM_MMAP_ANON    0
273251875Speter#define APR_HAVE_SHMEM_BEOS         0
274251875Speter
275251875Speter#define APR_USE_SHMEM_MMAP_TMP     0
276251875Speter#define APR_USE_SHMEM_MMAP_SHM     0
277251875Speter#define APR_USE_SHMEM_MMAP_ZERO    0
278251875Speter#define APR_USE_SHMEM_SHMGET_ANON  0
279251875Speter#define APR_USE_SHMEM_SHMGET       0
280251875Speter#define APR_USE_SHMEM_MMAP_ANON    0
281251875Speter#define APR_USE_SHMEM_BEOS         0
282251875Speter
283362181Sdim#define APR_USE_FLOCK_SERIALIZE           0
284251875Speter#define APR_USE_POSIXSEM_SERIALIZE        0
285251875Speter#define APR_USE_SYSVSEM_SERIALIZE         0
286251875Speter#define APR_USE_FCNTL_SERIALIZE           0
287362181Sdim#define APR_USE_PROC_PTHREAD_SERIALIZE    0
288362181Sdim#define APR_USE_PTHREAD_SERIALIZE         0
289251875Speter
290251875Speter#define APR_HAS_FLOCK_SERIALIZE           0
291251875Speter#define APR_HAS_SYSVSEM_SERIALIZE         0
292251875Speter#define APR_HAS_POSIXSEM_SERIALIZE        0
293251875Speter#define APR_HAS_FCNTL_SERIALIZE           0
294251875Speter#define APR_HAS_PROC_PTHREAD_SERIALIZE    0
295251875Speter
296251875Speter#define APR_PROCESS_LOCK_IS_GLOBAL        0
297251875Speter
298251875Speter#define APR_HAVE_CORKABLE_TCP   0
299251875Speter#define APR_HAVE_GETRLIMIT      0
300251875Speter#define APR_HAVE_ICONV          0
301251875Speter#define APR_HAVE_IN_ADDR        1
302251875Speter#define APR_HAVE_INET_ADDR      1
303251875Speter#define APR_HAVE_INET_NETWORK   0
304362181Sdim#define APR_HAVE_IPV6           1
305362181Sdim#define APR_HAVE_SOCKADDR_UN    0
306251875Speter#define APR_HAVE_MEMMOVE        1
307251875Speter#define APR_HAVE_SETRLIMIT      0
308251875Speter#define APR_HAVE_SIGACTION      0
309251875Speter#define APR_HAVE_SIGSUSPEND     0
310251875Speter#define APR_HAVE_SIGWAIT        0
311251875Speter#define APR_HAVE_SA_STORAGE     0
312251875Speter#define APR_HAVE_STRCASECMP     0
313251875Speter#define APR_HAVE_STRDUP         1
314251875Speter#define APR_HAVE_STRNCASECMP    0
315251875Speter#define APR_HAVE_STRSTR         1
316251875Speter#define APR_HAVE_MEMCHR         1
317251875Speter#define APR_HAVE_STRUCT_RLIMIT  0
318251875Speter#define APR_HAVE_UNION_SEMUN    0
319251875Speter#define APR_HAVE_SCTP           0
320251875Speter#define APR_HAVE_IOVEC          0
321251875Speter
322251875Speter#ifndef _WIN32_WCE
323251875Speter#define APR_HAVE_STRICMP        1
324251875Speter#define APR_HAVE_STRNICMP       1
325251875Speter#else
326251875Speter#define APR_HAVE_STRICMP        0
327251875Speter#define APR_HAVE_STRNICMP       0
328251875Speter#endif
329251875Speter
330251875Speter/*  APR Feature Macros */
331251875Speter#define APR_HAS_SHARED_MEMORY     1
332251875Speter#define APR_HAS_THREADS           1
333251875Speter#define APR_HAS_MMAP              1
334251875Speter#define APR_HAS_FORK              0
335251875Speter#define APR_HAS_RANDOM            1
336251875Speter#define APR_HAS_OTHER_CHILD       1
337251875Speter#define APR_HAS_DSO               1
338251875Speter#define APR_HAS_SO_ACCEPTFILTER   0
339251875Speter#define APR_HAS_UNICODE_FS        1
340251875Speter#define APR_HAS_PROC_INVOKED      1
341251875Speter#define APR_HAS_OS_UUID           1
342362181Sdim#define APR_HAS_TIMEDLOCKS        1
343251875Speter
344251875Speter#ifndef _WIN32_WCE
345251875Speter#define APR_HAS_SENDFILE          1
346251875Speter#define APR_HAS_USER              1
347251875Speter#define APR_HAS_LARGE_FILES       1
348251875Speter#define APR_HAS_XTHREAD_FILES     1
349251875Speter#define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD 1
350251875Speter#else
351251875Speter#define APR_HAS_SENDFILE          0
352251875Speter#define APR_HAS_USER              0
353251875Speter#define APR_HAS_LARGE_FILES       0
354251875Speter#define APR_HAS_XTHREAD_FILES     0
355251875Speter#define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD 0
356251875Speter#endif
357251875Speter
358251875Speter/* APR sets APR_FILES_AS_SOCKETS to 1 on systems where it is possible
359251875Speter * to poll on files/pipes.
360251875Speter */
361251875Speter#define APR_FILES_AS_SOCKETS      0
362251875Speter
363251875Speter/* This macro indicates whether or not EBCDIC is the native character set.
364251875Speter */
365251875Speter#define APR_CHARSET_EBCDIC        0
366251875Speter
367251875Speter/* If we have a TCP implementation that can be "corked", what flag
368251875Speter * do we use?
369251875Speter */
370251875Speter#define APR_TCP_NOPUSH_FLAG       @apr_tcp_nopush_flag@
371251875Speter
372251875Speter/* Is the TCP_NODELAY socket option inherited from listening sockets?
373251875Speter */
374251875Speter#define APR_TCP_NODELAY_INHERITED 1
375251875Speter
376251875Speter/* Is the O_NONBLOCK flag inherited from listening sockets?
377251875Speter */
378362181Sdim#define APR_O_NONBLOCK_INHERITED 1
379251875Speter
380251875Speter/* Typedefs that APR needs. */
381251875Speter
382251875Spetertypedef  unsigned char     apr_byte_t;
383251875Speter
384251875Spetertypedef  short             apr_int16_t;
385251875Spetertypedef  unsigned short    apr_uint16_t;
386251875Speter
387251875Spetertypedef  int               apr_int32_t;
388251875Spetertypedef  unsigned int      apr_uint32_t;
389251875Speter
390251875Spetertypedef  __int64           apr_int64_t;
391251875Spetertypedef  unsigned __int64  apr_uint64_t;
392251875Speter
393251875Spetertypedef  size_t      apr_size_t;
394251875Speter#if APR_HAVE_STDDEF_H
395251875Spetertypedef  ptrdiff_t   apr_ssize_t;
396251875Speter#else
397251875Spetertypedef  int         apr_ssize_t;
398251875Speter#endif
399251875Speter#if APR_HAS_LARGE_FILES
400251875Spetertypedef  __int64     apr_off_t;
401251875Speter#else
402251875Spetertypedef  int         apr_off_t;
403251875Speter#endif
404251875Spetertypedef  int         apr_socklen_t;
405251875Spetertypedef  apr_uint64_t      apr_ino_t;
406251875Speter
407253734Speter#ifdef _WIN64
408251875Speter#define APR_SIZEOF_VOIDP   8
409251875Speter#else
410251875Speter#define APR_SIZEOF_VOIDP   4
411251875Speter#endif
412251875Speter
413251875Speter#if APR_SIZEOF_VOIDP == 8
414251875Spetertypedef  apr_uint64_t            apr_uintptr_t;
415251875Speter#else
416251875Spetertypedef  apr_uint32_t            apr_uintptr_t;
417251875Speter#endif
418251875Speter
419251875Speter/* Are we big endian? */
420251875Speter/* XXX: Fatal assumption on Alpha platforms */
421251875Speter#define APR_IS_BIGENDIAN	0
422251875Speter
423251875Speter/* Mechanisms to properly type numeric literals */
424251875Speter
425251875Speter#ifndef __GNUC__
426251875Speter#define APR_INT64_C(val) (val##i64)
427251875Speter#define APR_UINT64_C(val) (val##Ui64)
428251875Speter#else
429251875Speter#define APR_INT64_C(val) (val##LL)
430251875Speter#define APR_UINT64_C(val) (val##ULL)
431251875Speter#endif
432251875Speter
433251875Speter#ifdef INT16_MIN
434251875Speter#define APR_INT16_MIN   INT16_MIN
435251875Speter#else
436251875Speter#define APR_INT16_MIN   (-0x7fff - 1)
437251875Speter#endif
438251875Speter
439251875Speter#ifdef INT16_MAX
440251875Speter#define APR_INT16_MAX  INT16_MAX
441251875Speter#else
442251875Speter#define APR_INT16_MAX   (0x7fff)
443251875Speter#endif
444251875Speter
445251875Speter#ifdef UINT16_MAX
446251875Speter#define APR_UINT16_MAX  UINT16_MAX
447251875Speter#else
448251875Speter#define APR_UINT16_MAX  (0xffff)
449251875Speter#endif
450251875Speter
451251875Speter#ifdef INT32_MIN
452251875Speter#define APR_INT32_MIN   INT32_MIN
453251875Speter#else
454251875Speter#define APR_INT32_MIN   (-0x7fffffff - 1)
455251875Speter#endif
456251875Speter
457251875Speter#ifdef INT32_MAX
458251875Speter#define APR_INT32_MAX  INT32_MAX
459251875Speter#else
460251875Speter#define APR_INT32_MAX  0x7fffffff
461251875Speter#endif
462251875Speter
463251875Speter#ifdef UINT32_MAX
464251875Speter#define APR_UINT32_MAX  UINT32_MAX
465251875Speter#else
466251875Speter#define APR_UINT32_MAX  (0xffffffffU)
467251875Speter#endif
468251875Speter
469251875Speter#ifdef INT64_MIN
470251875Speter#define APR_INT64_MIN   INT64_MIN
471251875Speter#else
472251875Speter#define APR_INT64_MIN   (APR_INT64_C(-0x7fffffffffffffff) - 1)
473251875Speter#endif
474251875Speter
475251875Speter#ifdef INT64_MAX
476251875Speter#define APR_INT64_MAX   INT64_MAX
477251875Speter#else
478251875Speter#define APR_INT64_MAX   APR_INT64_C(0x7fffffffffffffff)
479251875Speter#endif
480251875Speter
481251875Speter#ifdef UINT64_MAX
482251875Speter#define APR_UINT64_MAX  UINT64_MAX
483251875Speter#else
484251875Speter#define APR_UINT64_MAX  APR_UINT64_C(0xffffffffffffffff)
485251875Speter#endif
486251875Speter
487251875Speter#define APR_SIZE_MAX    (~((apr_size_t)0))
488251875Speter
489251875Speter/* Definitions that APR programs need to work properly. */
490251875Speter
491251875Speter/**
492251875Speter * APR public API wrap for C++ compilers.
493251875Speter */
494251875Speter#ifdef __cplusplus
495251875Speter#define APR_BEGIN_DECLS     extern "C" {
496251875Speter#define APR_END_DECLS       }
497251875Speter#else
498251875Speter#define APR_BEGIN_DECLS
499251875Speter#define APR_END_DECLS
500251875Speter#endif
501251875Speter
502251875Speter/** 
503251875Speter * Thread callbacks from APR functions must be declared with APR_THREAD_FUNC, 
504251875Speter * so that they follow the platform's calling convention.
505251875Speter * <PRE>
506251875Speter *
507251875Speter * void* APR_THREAD_FUNC my_thread_entry_fn(apr_thread_t *thd, void *data);
508251875Speter *
509251875Speter * </PRE>
510251875Speter */
511251875Speter#define APR_THREAD_FUNC  __stdcall
512251875Speter
513251875Speter
514251875Speter#if defined(DOXYGEN) || !defined(WIN32)
515251875Speter
516251875Speter/**
517251875Speter * The public APR functions are declared with APR_DECLARE(), so they may
518251875Speter * use the most appropriate calling convention.  Public APR functions with 
519251875Speter * variable arguments must use APR_DECLARE_NONSTD().
520251875Speter *
521251875Speter * @remark Both the declaration and implementations must use the same macro.
522251875Speter *
523251875Speter * <PRE>
524251875Speter * APR_DECLARE(rettype) apr_func(args)
525251875Speter * </PRE>
526251875Speter * @see APR_DECLARE_NONSTD @see APR_DECLARE_DATA
527251875Speter * @remark Note that when APR compiles the library itself, it passes the 
528251875Speter * symbol -DAPR_DECLARE_EXPORT to the compiler on some platforms (e.g. Win32) 
529251875Speter * to export public symbols from the dynamic library build.\n
530251875Speter * The user must define the APR_DECLARE_STATIC when compiling to target
531251875Speter * the static APR library on some platforms (e.g. Win32.)  The public symbols 
532251875Speter * are neither exported nor imported when APR_DECLARE_STATIC is defined.\n
533251875Speter * By default, compiling an application and including the APR public
534251875Speter * headers, without defining APR_DECLARE_STATIC, will prepare the code to be
535251875Speter * linked to the dynamic library.
536251875Speter */
537251875Speter#define APR_DECLARE(type)            type 
538251875Speter
539251875Speter/**
540251875Speter * The public APR functions using variable arguments are declared with 
541251875Speter * APR_DECLARE_NONSTD(), as they must follow the C language calling convention.
542251875Speter * @see APR_DECLARE @see APR_DECLARE_DATA
543251875Speter * @remark Both the declaration and implementations must use the same macro.
544251875Speter * <PRE>
545251875Speter *
546251875Speter * APR_DECLARE_NONSTD(rettype) apr_func(args, ...);
547251875Speter *
548251875Speter * </PRE>
549251875Speter */
550251875Speter#define APR_DECLARE_NONSTD(type)     type
551251875Speter
552251875Speter/**
553251875Speter * The public APR variables are declared with AP_MODULE_DECLARE_DATA.
554251875Speter * This assures the appropriate indirection is invoked at compile time.
555251875Speter * @see APR_DECLARE @see APR_DECLARE_NONSTD
556251875Speter * @remark Note that the declaration and implementations use different forms,
557251875Speter * but both must include the macro.
558251875Speter * 
559251875Speter * <PRE>
560251875Speter *
561251875Speter * extern APR_DECLARE_DATA type apr_variable;\n
562251875Speter * APR_DECLARE_DATA type apr_variable = value;
563251875Speter *
564251875Speter * </PRE>
565251875Speter */
566251875Speter#define APR_DECLARE_DATA
567251875Speter
568251875Speter#elif defined(APR_DECLARE_STATIC)
569251875Speter#define APR_DECLARE(type)            type __stdcall
570251875Speter#define APR_DECLARE_NONSTD(type)     type __cdecl
571251875Speter#define APR_DECLARE_DATA
572251875Speter#elif defined(APR_DECLARE_EXPORT)
573251875Speter#define APR_DECLARE(type)            __declspec(dllexport) type __stdcall
574251875Speter#define APR_DECLARE_NONSTD(type)     __declspec(dllexport) type __cdecl
575251875Speter#define APR_DECLARE_DATA             __declspec(dllexport)
576251875Speter#else
577251875Speter#define APR_DECLARE(type)            __declspec(dllimport) type __stdcall
578251875Speter#define APR_DECLARE_NONSTD(type)     __declspec(dllimport) type __cdecl
579251875Speter#define APR_DECLARE_DATA             __declspec(dllimport)
580251875Speter#endif
581251875Speter
582253734Speter#ifdef _WIN64
583251875Speter#define APR_SSIZE_T_FMT          "I64d"
584251875Speter#define APR_SIZE_T_FMT           "I64u"
585251875Speter#else
586251875Speter#define APR_SSIZE_T_FMT          "d"
587251875Speter#define APR_SIZE_T_FMT           "u"
588251875Speter#endif
589251875Speter
590251875Speter#if APR_HAS_LARGE_FILES
591251875Speter#define APR_OFF_T_FMT            "I64d"
592251875Speter#else
593251875Speter#define APR_OFF_T_FMT            "d"
594251875Speter#endif
595251875Speter
596251875Speter#define APR_PID_T_FMT            "d"
597251875Speter
598251875Speter#define APR_INT64_T_FMT          "I64d"
599251875Speter#define APR_UINT64_T_FMT         "I64u"
600251875Speter#define APR_UINT64_T_HEX_FMT     "I64x"
601251875Speter
602251875Speter/* No difference between PROC and GLOBAL mutex */
603251875Speter#define APR_PROC_MUTEX_IS_GLOBAL      1
604251875Speter
605251875Speter/* Local machine definition for console and log output. */
606251875Speter#define APR_EOL_STR              "\r\n"
607251875Speter
608251875Spetertypedef int apr_wait_t;
609251875Speter
610251875Speter#if APR_HAS_UNICODE_FS
611251875Speter/* An arbitrary size that is digestable. True max is a bit less than 32000 */
612251875Speter#define APR_PATH_MAX 8192
613251875Speter#else /* !APR_HAS_UNICODE_FS */
614251875Speter#define APR_PATH_MAX MAX_PATH
615251875Speter#endif
616251875Speter
617251875Speter#define APR_DSOPATH "PATH"
618251875Speter
619251875Speter/** @} */
620251875Speter
621251875Speter/* Definitions that only Win32 programs need to compile properly. */
622251875Speter
623251875Speter/* XXX These simply don't belong here, perhaps in apr_portable.h
624251875Speter * based on some APR_HAVE_PID/GID/UID?
625251875Speter */
626251875Speter#ifndef __GNUC__
627251875Spetertypedef  int         pid_t;
628251875Speter#endif
629251875Spetertypedef  int         uid_t;
630251875Spetertypedef  int         gid_t;
631251875Speter
632251875Speter/* Win32 .h ommissions we really need */
633251875Speter#define STDIN_FILENO  0
634251875Speter#define STDOUT_FILENO 1
635251875Speter#define STDERR_FILENO 2
636251875Speter
637251875Speter#if APR_HAVE_IPV6
638251875Speter
639251875Speter/* Appears in later flavors, not the originals. */
640251875Speter#ifndef in_addr6
641251875Speter#define  in6_addr    in_addr6
642251875Speter#endif
643251875Speter
644251875Speter#ifndef WS2TCPIP_INLINE
645251875Speter#define IN6_IS_ADDR_V4MAPPED(a) \
646251875Speter    (   (*(const apr_uint64_t *)(const void *)(&(a)->s6_addr[0]) == 0) \
647251875Speter     && (*(const apr_uint32_t *)(const void *)(&(a)->s6_addr[8]) == ntohl(0x0000ffff)))
648251875Speter#endif
649251875Speter
650362181Sdim#endif /* APR_HAVE_IPV6 */
651251875Speter
652251875Speter#ifdef __cplusplus
653251875Speter}
654251875Speter#endif
655251875Speter
656362181Sdim/* Done with badly written headers, leave 'deprecated CRT' undeprecated
657251875Speter */
658251875Speter#if defined(_MSC_VER) && _MSC_VER >= 1200
659251875Speter#pragma warning(pop)
660362181Sdim#if _MSC_VER >= 1400
661251875Speter#pragma warning(disable: 4996)
662251875Speter#endif
663362181Sdim#endif
664251875Speter
665251875Speter#endif /* WIN32 */
666251875Speter
667251875Speter#endif /* APR_H */
668