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
28266733Speter * 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 */
63266733Speter#pragma warning(disable: 4100 4127 4163 4201 4514; once: 4057 4075 4244)
64266733Speter
65266733Speter/* Ignore Microsoft's interpretation of secure development
66266733Speter * and the POSIX string handling API
67266733Speter */
68266733Speter#if defined(_MSC_VER) && _MSC_VER >= 1400
69266733Speter#ifndef _CRT_SECURE_NO_DEPRECATE
70266733Speter#define _CRT_SECURE_NO_DEPRECATE
71266733Speter#endif
72266733Speter#pragma warning(disable: 4996)
73266733Speter#endif
74266733Speter
75266733Speter/* Has windows.h already been included?  If so, our preferences don't matter,
76266733Speter * but we will still need the winsock things no matter what was included.
77266733Speter * If not, include a restricted set of windows headers to our tastes.
78266733Speter */
79266733Speter#ifndef _WINDOWS_
80266733Speter#ifndef WIN32_LEAN_AND_MEAN
81266733Speter#define WIN32_LEAN_AND_MEAN
82266733Speter#endif
83266733Speter#ifndef _WIN32_WINNT
84266733Speter#define _WIN32_WINNT @win32_winnt_str@
85266733Speter#endif
86266733Speter#ifndef NOUSER
87266733Speter#define NOUSER
88266733Speter#endif
89266733Speter#ifndef NOMCX
90266733Speter#define NOMCX
91266733Speter#endif
92266733Speter#ifndef NOIME
93266733Speter#define NOIME
94266733Speter#endif
95266733Speter#include <windows.h>
96266733Speter/* 
97266733Speter * Add a _very_few_ declarations missing from the restricted set of headers
98266733Speter * (If this list becomes extensive, re-enable the required headers above!)
99266733Speter * winsock headers were excluded by WIN32_LEAN_AND_MEAN, so include them now
100266733Speter */
101266733Speter#define SW_HIDE             0
102266733Speter#ifndef _WIN32_WCE
103266733Speter#include <winsock2.h>
104266733Speter#include <ws2tcpip.h>
105266733Speter#include <mswsock.h>
106266733Speter#else
107266733Speter#include <winsock.h>
108266733Speter#endif
109266733Speter#endif /* !_WINDOWS_ */
110266733Speter
111266733Speter/**
112266733Speter * @defgroup APR Apache Portability Runtime library
113266733Speter * @{
114266733Speter */
115266733Speter/**
116266733Speter * @defgroup apr_platform Platform Definitions
117266733Speter * @{
118266733Speter * @warning
119266733Speter * <strong><em>The actual values of macros and typedefs on this page<br>
120266733Speter * are platform specific and should NOT be relied upon!</em></strong>
121266733Speter */
122266733Speter
123266733Speter#define APR_INLINE __inline
124266733Speter#define APR_HAS_INLINE          1
125266733Speter#if !defined(__GNUC__) && !defined(__attribute__)
126266733Speter#define __attribute__(__x)
127266733Speter#endif
128266733Speter
129266733Speter#ifndef _WIN32_WCE
130266733Speter#define APR_HAVE_ARPA_INET_H    0
131266733Speter#define APR_HAVE_CONIO_H        1
132266733Speter#define APR_HAVE_CRYPT_H        0
133266733Speter#define APR_HAVE_CTYPE_H        1
134266733Speter#define APR_HAVE_DIRENT_H       0
135266733Speter#define APR_HAVE_ERRNO_H        1
136266733Speter#define APR_HAVE_FCNTL_H        1
137266733Speter#define APR_HAVE_IO_H           1
138266733Speter#define APR_HAVE_LIMITS_H       1
139266733Speter#define APR_HAVE_NETDB_H        0
140266733Speter#define APR_HAVE_NETINET_IN_H   0
141266733Speter#define APR_HAVE_NETINET_SCTP_H 0
142266733Speter#define APR_HAVE_NETINET_SCTP_UIO_H 0
143266733Speter#define APR_HAVE_NETINET_TCP_H  0
144266733Speter#define APR_HAVE_PTHREAD_H      0
145266733Speter#define APR_HAVE_SEMAPHORE_H    0
146266733Speter#define APR_HAVE_SIGNAL_H       1
147266733Speter#define APR_HAVE_STDARG_H       1
148266733Speter#define APR_HAVE_STDINT_H       0
149266733Speter#define APR_HAVE_STDIO_H        1
150266733Speter#define APR_HAVE_STDLIB_H       1
151266733Speter#define APR_HAVE_STRING_H       1
152266733Speter#define APR_HAVE_STRINGS_H      0
153266733Speter#define APR_HAVE_SYS_IOCTL_H    0
154266733Speter#define APR_HAVE_SYS_SENDFILE_H 0
155266733Speter#define APR_HAVE_SYS_SIGNAL_H   0
156266733Speter#define APR_HAVE_SYS_SOCKET_H   0
157266733Speter#define APR_HAVE_SYS_SOCKIO_H   0
158266733Speter#define APR_HAVE_SYS_SYSLIMITS_H 0
159266733Speter#define APR_HAVE_SYS_TIME_H     0
160266733Speter#define APR_HAVE_SYS_TYPES_H    1
161266733Speter#define APR_HAVE_SYS_UIO_H      0
162266733Speter#define APR_HAVE_SYS_UN_H       0
163266733Speter#define APR_HAVE_SYS_WAIT_H     0
164266733Speter#define APR_HAVE_TIME_H         1
165266733Speter#define APR_HAVE_UNISTD_H       0
166266733Speter#define APR_HAVE_STDDEF_H       1
167266733Speter#define APR_HAVE_PROCESS_H      1
168266733Speter#else
169266733Speter#define APR_HAVE_ARPA_INET_H    0
170266733Speter#define APR_HAVE_CONIO_H        0
171266733Speter#define APR_HAVE_CRYPT_H        0
172266733Speter#define APR_HAVE_CTYPE_H        0
173266733Speter#define APR_HAVE_DIRENT_H       0
174266733Speter#define APR_HAVE_ERRNO_H        0
175266733Speter#define APR_HAVE_FCNTL_H        0
176266733Speter#define APR_HAVE_IO_H           0
177266733Speter#define APR_HAVE_LIMITS_H       0
178266733Speter#define APR_HAVE_NETDB_H        0
179266733Speter#define APR_HAVE_NETINET_IN_H   0
180266733Speter#define APR_HAVE_NETINET_SCTP_H 0
181266733Speter#define APR_HAVE_NETINET_SCTP_UIO_H 0
182266733Speter#define APR_HAVE_NETINET_TCP_H  0
183266733Speter#define APR_HAVE_PTHREAD_H      0
184266733Speter#define APR_HAVE_SEMAPHORE_H    0
185266733Speter#define APR_HAVE_SIGNAL_H       0
186266733Speter#define APR_HAVE_STDARG_H       0
187266733Speter#define APR_HAVE_STDINT_H       0
188266733Speter#define APR_HAVE_STDIO_H        1
189266733Speter#define APR_HAVE_STDLIB_H       1
190266733Speter#define APR_HAVE_STRING_H       1
191266733Speter#define APR_HAVE_STRINGS_H      0
192266733Speter#define APR_HAVE_SYS_IOCTL_H    0
193266733Speter#define APR_HAVE_SYS_SENDFILE_H 0
194266733Speter#define APR_HAVE_SYS_SIGNAL_H   0
195266733Speter#define APR_HAVE_SYS_SOCKET_H   0
196266733Speter#define APR_HAVE_SYS_SOCKIO_H   0
197266733Speter#define APR_HAVE_SYS_SYSLIMITS_H 0
198266733Speter#define APR_HAVE_SYS_TIME_H     0
199266733Speter#define APR_HAVE_SYS_TYPES_H    0
200266733Speter#define APR_HAVE_SYS_UIO_H      0
201266733Speter#define APR_HAVE_SYS_UN_H       0
202266733Speter#define APR_HAVE_SYS_WAIT_H     0
203266733Speter#define APR_HAVE_TIME_H         0
204266733Speter#define APR_HAVE_UNISTD_H       0
205266733Speter#define APR_HAVE_STDDEF_H       0
206266733Speter#define APR_HAVE_PROCESS_H      0
207266733Speter#endif
208266733Speter
209266733Speter/** @} */
210266733Speter/** @} */
211266733Speter
212266733Speter/* We don't include our conditional headers within the doxyblocks 
213266733Speter * or the extern "C" namespace 
214266733Speter */
215266733Speter
216266733Speter#if APR_HAVE_STDLIB_H
217266733Speter#include <stdlib.h>
218266733Speter#endif
219266733Speter#if APR_HAVE_STDIO_H
220266733Speter#include <stdio.h>
221266733Speter#endif
222266733Speter#if APR_HAVE_SYS_TYPES_H
223266733Speter#include <sys/types.h>
224266733Speter#endif
225266733Speter#if APR_HAVE_STDDEF_H
226266733Speter#include <stddef.h>
227266733Speter#endif
228266733Speter#if APR_HAVE_TIME_H
229266733Speter#include <time.h>
230266733Speter#endif
231266733Speter#if APR_HAVE_PROCESS_H
232266733Speter#include <process.h>
233266733Speter#endif
234266733Speter
235266733Speter#ifdef __cplusplus
236266733Speterextern "C" {
237266733Speter#endif
238266733Speter
239266733Speter/**
240266733Speter * @addtogroup apr_platform
241266733Speter * @ingroup APR 
242266733Speter * @{
243266733Speter */
244266733Speter
245266733Speter#define APR_HAVE_SHMEM_MMAP_TMP     0
246266733Speter#define APR_HAVE_SHMEM_MMAP_SHM     0
247266733Speter#define APR_HAVE_SHMEM_MMAP_ZERO    0
248266733Speter#define APR_HAVE_SHMEM_SHMGET_ANON  0
249266733Speter#define APR_HAVE_SHMEM_SHMGET       0
250266733Speter#define APR_HAVE_SHMEM_MMAP_ANON    0
251266733Speter#define APR_HAVE_SHMEM_BEOS         0
252266733Speter
253266733Speter#define APR_USE_SHMEM_MMAP_TMP     0
254266733Speter#define APR_USE_SHMEM_MMAP_SHM     0
255266733Speter#define APR_USE_SHMEM_MMAP_ZERO    0
256266733Speter#define APR_USE_SHMEM_SHMGET_ANON  0
257266733Speter#define APR_USE_SHMEM_SHMGET       0
258266733Speter#define APR_USE_SHMEM_MMAP_ANON    0
259266733Speter#define APR_USE_SHMEM_BEOS         0
260266733Speter
261266733Speter#define APR_USE_FLOCK_SERIALIZE           0 
262266733Speter#define APR_USE_POSIXSEM_SERIALIZE        0
263266733Speter#define APR_USE_SYSVSEM_SERIALIZE         0
264266733Speter#define APR_USE_FCNTL_SERIALIZE           0
265266733Speter#define APR_USE_PROC_PTHREAD_SERIALIZE    0 
266266733Speter#define APR_USE_PTHREAD_SERIALIZE         0 
267266733Speter
268266733Speter#define APR_HAS_FLOCK_SERIALIZE           0
269266733Speter#define APR_HAS_SYSVSEM_SERIALIZE         0
270266733Speter#define APR_HAS_POSIXSEM_SERIALIZE        0
271266733Speter#define APR_HAS_FCNTL_SERIALIZE           0
272266733Speter#define APR_HAS_PROC_PTHREAD_SERIALIZE    0
273266733Speter
274266733Speter#define APR_PROCESS_LOCK_IS_GLOBAL        0
275266733Speter
276266733Speter#define APR_HAVE_CORKABLE_TCP   0
277266733Speter#define APR_HAVE_GETRLIMIT      0
278266733Speter#define APR_HAVE_ICONV          0
279266733Speter#define APR_HAVE_IN_ADDR        1
280266733Speter#define APR_HAVE_INET_ADDR      1
281266733Speter#define APR_HAVE_INET_NETWORK   0
282266733Speter#define APR_HAVE_IPV6           @apr_have_ipv6_10@
283266733Speter#define APR_HAVE_MEMMOVE        1
284266733Speter#define APR_HAVE_SETRLIMIT      0
285266733Speter#define APR_HAVE_SIGACTION      0
286266733Speter#define APR_HAVE_SIGSUSPEND     0
287266733Speter#define APR_HAVE_SIGWAIT        0
288266733Speter#define APR_HAVE_SA_STORAGE     0
289266733Speter#define APR_HAVE_STRCASECMP     0
290266733Speter#define APR_HAVE_STRDUP         1
291266733Speter#define APR_HAVE_STRNCASECMP    0
292266733Speter#define APR_HAVE_STRSTR         1
293266733Speter#define APR_HAVE_MEMCHR         1
294266733Speter#define APR_HAVE_STRUCT_RLIMIT  0
295266733Speter#define APR_HAVE_UNION_SEMUN    0
296266733Speter#define APR_HAVE_SCTP           0
297266733Speter#define APR_HAVE_IOVEC          0
298266733Speter
299266733Speter#ifndef _WIN32_WCE
300266733Speter#define APR_HAVE_STRICMP        1
301266733Speter#define APR_HAVE_STRNICMP       1
302266733Speter#else
303266733Speter#define APR_HAVE_STRICMP        0
304266733Speter#define APR_HAVE_STRNICMP       0
305266733Speter#endif
306266733Speter
307266733Speter/*  APR Feature Macros */
308266733Speter#define APR_HAS_SHARED_MEMORY     1
309266733Speter#define APR_HAS_THREADS           1
310266733Speter#define APR_HAS_MMAP              1
311266733Speter#define APR_HAS_FORK              0
312266733Speter#define APR_HAS_RANDOM            1
313266733Speter#define APR_HAS_OTHER_CHILD       1
314266733Speter#define APR_HAS_DSO               1
315266733Speter#define APR_HAS_SO_ACCEPTFILTER   0
316266733Speter#define APR_HAS_UNICODE_FS        1
317266733Speter#define APR_HAS_PROC_INVOKED      1
318266733Speter#define APR_HAS_OS_UUID           1
319266733Speter
320266733Speter#ifndef _WIN32_WCE
321266733Speter#define APR_HAS_SENDFILE          1
322266733Speter#define APR_HAS_USER              1
323266733Speter#define APR_HAS_LARGE_FILES       1
324266733Speter#define APR_HAS_XTHREAD_FILES     1
325266733Speter#define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD 1
326266733Speter#else
327266733Speter#define APR_HAS_SENDFILE          0
328266733Speter#define APR_HAS_USER              0
329266733Speter#define APR_HAS_LARGE_FILES       0
330266733Speter#define APR_HAS_XTHREAD_FILES     0
331266733Speter#define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD 0
332266733Speter#endif
333266733Speter
334266733Speter/* APR sets APR_FILES_AS_SOCKETS to 1 on systems where it is possible
335266733Speter * to poll on files/pipes.
336266733Speter */
337266733Speter#define APR_FILES_AS_SOCKETS      0
338266733Speter
339266733Speter/* This macro indicates whether or not EBCDIC is the native character set.
340266733Speter */
341266733Speter#define APR_CHARSET_EBCDIC        0
342266733Speter
343266733Speter/* If we have a TCP implementation that can be "corked", what flag
344266733Speter * do we use?
345266733Speter */
346266733Speter#define APR_TCP_NOPUSH_FLAG       @apr_tcp_nopush_flag@
347266733Speter
348266733Speter/* Is the TCP_NODELAY socket option inherited from listening sockets?
349266733Speter */
350266733Speter#define APR_TCP_NODELAY_INHERITED 1
351266733Speter
352266733Speter/* Is the O_NONBLOCK flag inherited from listening sockets?
353266733Speter */
354266733Speter#define APR_O_NONBLOCK_INHERITED  1
355266733Speter
356266733Speter/* Typedefs that APR needs. */
357266733Speter
358266733Spetertypedef  unsigned char     apr_byte_t;
359266733Speter
360266733Spetertypedef  short             apr_int16_t;
361266733Spetertypedef  unsigned short    apr_uint16_t;
362266733Speter
363266733Spetertypedef  int               apr_int32_t;
364266733Spetertypedef  unsigned int      apr_uint32_t;
365266733Speter
366266733Spetertypedef  __int64           apr_int64_t;
367266733Spetertypedef  unsigned __int64  apr_uint64_t;
368266733Speter
369266733Spetertypedef  size_t      apr_size_t;
370266733Speter#if APR_HAVE_STDDEF_H
371266733Spetertypedef  ptrdiff_t   apr_ssize_t;
372266733Speter#else
373266733Spetertypedef  int         apr_ssize_t;
374266733Speter#endif
375266733Speter#if APR_HAS_LARGE_FILES
376266733Spetertypedef  __int64     apr_off_t;
377266733Speter#else
378266733Spetertypedef  int         apr_off_t;
379266733Speter#endif
380266733Spetertypedef  int         apr_socklen_t;
381266733Spetertypedef  apr_uint64_t      apr_ino_t;
382266733Speter
383266733Speter#ifdef _WIN64
384266733Speter#define APR_SIZEOF_VOIDP   8
385266733Speter#else
386266733Speter#define APR_SIZEOF_VOIDP   4
387266733Speter#endif
388266733Speter
389266733Speter#if APR_SIZEOF_VOIDP == 8
390266733Spetertypedef  apr_uint64_t            apr_uintptr_t;
391266733Speter#else
392266733Spetertypedef  apr_uint32_t            apr_uintptr_t;
393266733Speter#endif
394266733Speter
395266733Speter/* Are we big endian? */
396266733Speter/* XXX: Fatal assumption on Alpha platforms */
397266733Speter#define APR_IS_BIGENDIAN	0
398266733Speter
399266733Speter/* Mechanisms to properly type numeric literals */
400266733Speter
401266733Speter#ifndef __GNUC__
402266733Speter#define APR_INT64_C(val) (val##i64)
403266733Speter#define APR_UINT64_C(val) (val##Ui64)
404266733Speter#else
405266733Speter#define APR_INT64_C(val) (val##LL)
406266733Speter#define APR_UINT64_C(val) (val##ULL)
407266733Speter#endif
408266733Speter
409266733Speter#ifdef INT16_MIN
410266733Speter#define APR_INT16_MIN   INT16_MIN
411266733Speter#else
412266733Speter#define APR_INT16_MIN   (-0x7fff - 1)
413266733Speter#endif
414266733Speter
415266733Speter#ifdef INT16_MAX
416266733Speter#define APR_INT16_MAX  INT16_MAX
417266733Speter#else
418266733Speter#define APR_INT16_MAX   (0x7fff)
419266733Speter#endif
420266733Speter
421266733Speter#ifdef UINT16_MAX
422266733Speter#define APR_UINT16_MAX  UINT16_MAX
423266733Speter#else
424266733Speter#define APR_UINT16_MAX  (0xffff)
425266733Speter#endif
426266733Speter
427266733Speter#ifdef INT32_MIN
428266733Speter#define APR_INT32_MIN   INT32_MIN
429266733Speter#else
430266733Speter#define APR_INT32_MIN   (-0x7fffffff - 1)
431266733Speter#endif
432266733Speter
433266733Speter#ifdef INT32_MAX
434266733Speter#define APR_INT32_MAX  INT32_MAX
435266733Speter#else
436266733Speter#define APR_INT32_MAX  0x7fffffff
437266733Speter#endif
438266733Speter
439266733Speter#ifdef UINT32_MAX
440266733Speter#define APR_UINT32_MAX  UINT32_MAX
441266733Speter#else
442266733Speter#define APR_UINT32_MAX  (0xffffffffU)
443266733Speter#endif
444266733Speter
445266733Speter#ifdef INT64_MIN
446266733Speter#define APR_INT64_MIN   INT64_MIN
447266733Speter#else
448266733Speter#define APR_INT64_MIN   (APR_INT64_C(-0x7fffffffffffffff) - 1)
449266733Speter#endif
450266733Speter
451266733Speter#ifdef INT64_MAX
452266733Speter#define APR_INT64_MAX   INT64_MAX
453266733Speter#else
454266733Speter#define APR_INT64_MAX   APR_INT64_C(0x7fffffffffffffff)
455266733Speter#endif
456266733Speter
457266733Speter#ifdef UINT64_MAX
458266733Speter#define APR_UINT64_MAX  UINT64_MAX
459266733Speter#else
460266733Speter#define APR_UINT64_MAX  APR_UINT64_C(0xffffffffffffffff)
461266733Speter#endif
462266733Speter
463266733Speter#define APR_SIZE_MAX    (~((apr_size_t)0))
464266733Speter
465266733Speter/* Definitions that APR programs need to work properly. */
466266733Speter
467266733Speter/**
468266733Speter * APR public API wrap for C++ compilers.
469266733Speter */
470266733Speter#ifdef __cplusplus
471266733Speter#define APR_BEGIN_DECLS     extern "C" {
472266733Speter#define APR_END_DECLS       }
473266733Speter#else
474266733Speter#define APR_BEGIN_DECLS
475266733Speter#define APR_END_DECLS
476266733Speter#endif
477266733Speter
478266733Speter/** 
479266733Speter * Thread callbacks from APR functions must be declared with APR_THREAD_FUNC, 
480266733Speter * so that they follow the platform's calling convention.
481266733Speter * <PRE>
482266733Speter *
483266733Speter * void* APR_THREAD_FUNC my_thread_entry_fn(apr_thread_t *thd, void *data);
484266733Speter *
485266733Speter * </PRE>
486266733Speter */
487266733Speter#define APR_THREAD_FUNC  __stdcall
488266733Speter
489266733Speter
490266733Speter#if defined(DOXYGEN) || !defined(WIN32)
491266733Speter
492266733Speter/**
493266733Speter * The public APR functions are declared with APR_DECLARE(), so they may
494266733Speter * use the most appropriate calling convention.  Public APR functions with 
495266733Speter * variable arguments must use APR_DECLARE_NONSTD().
496266733Speter *
497266733Speter * @remark Both the declaration and implementations must use the same macro.
498266733Speter *
499266733Speter * <PRE>
500266733Speter * APR_DECLARE(rettype) apr_func(args)
501266733Speter * </PRE>
502266733Speter * @see APR_DECLARE_NONSTD @see APR_DECLARE_DATA
503266733Speter * @remark Note that when APR compiles the library itself, it passes the 
504266733Speter * symbol -DAPR_DECLARE_EXPORT to the compiler on some platforms (e.g. Win32) 
505266733Speter * to export public symbols from the dynamic library build.\n
506266733Speter * The user must define the APR_DECLARE_STATIC when compiling to target
507266733Speter * the static APR library on some platforms (e.g. Win32.)  The public symbols 
508266733Speter * are neither exported nor imported when APR_DECLARE_STATIC is defined.\n
509266733Speter * By default, compiling an application and including the APR public
510266733Speter * headers, without defining APR_DECLARE_STATIC, will prepare the code to be
511266733Speter * linked to the dynamic library.
512266733Speter */
513266733Speter#define APR_DECLARE(type)            type 
514266733Speter
515266733Speter/**
516266733Speter * The public APR functions using variable arguments are declared with 
517266733Speter * APR_DECLARE_NONSTD(), as they must follow the C language calling convention.
518266733Speter * @see APR_DECLARE @see APR_DECLARE_DATA
519266733Speter * @remark Both the declaration and implementations must use the same macro.
520266733Speter * <PRE>
521266733Speter *
522266733Speter * APR_DECLARE_NONSTD(rettype) apr_func(args, ...);
523266733Speter *
524266733Speter * </PRE>
525266733Speter */
526266733Speter#define APR_DECLARE_NONSTD(type)     type
527266733Speter
528266733Speter/**
529266733Speter * The public APR variables are declared with AP_MODULE_DECLARE_DATA.
530266733Speter * This assures the appropriate indirection is invoked at compile time.
531266733Speter * @see APR_DECLARE @see APR_DECLARE_NONSTD
532266733Speter * @remark Note that the declaration and implementations use different forms,
533266733Speter * but both must include the macro.
534266733Speter * 
535266733Speter * <PRE>
536266733Speter *
537266733Speter * extern APR_DECLARE_DATA type apr_variable;\n
538266733Speter * APR_DECLARE_DATA type apr_variable = value;
539266733Speter *
540266733Speter * </PRE>
541266733Speter */
542266733Speter#define APR_DECLARE_DATA
543266733Speter
544266733Speter#elif defined(APR_DECLARE_STATIC)
545266733Speter#define APR_DECLARE(type)            type __stdcall
546266733Speter#define APR_DECLARE_NONSTD(type)     type __cdecl
547266733Speter#define APR_DECLARE_DATA
548266733Speter#elif defined(APR_DECLARE_EXPORT)
549266733Speter#define APR_DECLARE(type)            __declspec(dllexport) type __stdcall
550266733Speter#define APR_DECLARE_NONSTD(type)     __declspec(dllexport) type __cdecl
551266733Speter#define APR_DECLARE_DATA             __declspec(dllexport)
552266733Speter#else
553266733Speter#define APR_DECLARE(type)            __declspec(dllimport) type __stdcall
554266733Speter#define APR_DECLARE_NONSTD(type)     __declspec(dllimport) type __cdecl
555266733Speter#define APR_DECLARE_DATA             __declspec(dllimport)
556266733Speter#endif
557266733Speter
558266733Speter#ifdef _WIN64
559266733Speter#define APR_SSIZE_T_FMT          "I64d"
560266733Speter#define APR_SIZE_T_FMT           "I64u"
561266733Speter#else
562266733Speter#define APR_SSIZE_T_FMT          "d"
563266733Speter#define APR_SIZE_T_FMT           "u"
564266733Speter#endif
565266733Speter
566266733Speter#if APR_HAS_LARGE_FILES
567266733Speter#define APR_OFF_T_FMT            "I64d"
568266733Speter#else
569266733Speter#define APR_OFF_T_FMT            "d"
570266733Speter#endif
571266733Speter
572266733Speter#define APR_PID_T_FMT            "d"
573266733Speter
574266733Speter#define APR_INT64_T_FMT          "I64d"
575266733Speter#define APR_UINT64_T_FMT         "I64u"
576266733Speter#define APR_UINT64_T_HEX_FMT     "I64x"
577266733Speter
578266733Speter/* No difference between PROC and GLOBAL mutex */
579266733Speter#define APR_PROC_MUTEX_IS_GLOBAL      1
580266733Speter
581266733Speter/* Local machine definition for console and log output. */
582266733Speter#define APR_EOL_STR              "\r\n"
583266733Speter
584266733Spetertypedef int apr_wait_t;
585266733Speter
586266733Speter#if APR_HAS_UNICODE_FS
587266733Speter/* An arbitrary size that is digestable. True max is a bit less than 32000 */
588266733Speter#define APR_PATH_MAX 8192
589266733Speter#else /* !APR_HAS_UNICODE_FS */
590266733Speter#define APR_PATH_MAX MAX_PATH
591266733Speter#endif
592266733Speter
593266733Speter#define APR_DSOPATH "PATH"
594266733Speter
595266733Speter/** @} */
596266733Speter
597266733Speter/* Definitions that only Win32 programs need to compile properly. */
598266733Speter
599266733Speter/* XXX These simply don't belong here, perhaps in apr_portable.h
600266733Speter * based on some APR_HAVE_PID/GID/UID?
601266733Speter */
602266733Speter#ifndef __GNUC__
603266733Spetertypedef  int         pid_t;
604266733Speter#endif
605266733Spetertypedef  int         uid_t;
606266733Spetertypedef  int         gid_t;
607266733Speter
608266733Speter/* Win32 .h ommissions we really need */
609266733Speter#define STDIN_FILENO  0
610266733Speter#define STDOUT_FILENO 1
611266733Speter#define STDERR_FILENO 2
612266733Speter
613266733Speter#if APR_HAVE_IPV6
614266733Speter
615266733Speter/* Appears in later flavors, not the originals. */
616266733Speter#ifndef in_addr6
617266733Speter#define  in6_addr    in_addr6
618266733Speter#endif
619266733Speter
620266733Speter#ifndef WS2TCPIP_INLINE
621266733Speter#define IN6_IS_ADDR_V4MAPPED(a) \
622266733Speter    (   (*(const apr_uint64_t *)(const void *)(&(a)->s6_addr[0]) == 0) \
623266733Speter     && (*(const apr_uint32_t *)(const void *)(&(a)->s6_addr[8]) == ntohl(0x0000ffff)))
624266733Speter#endif
625266733Speter
626266733Speter#endif /* APR_HAS_IPV6 */
627266733Speter
628266733Speter#ifdef __cplusplus
629266733Speter}
630266733Speter#endif
631266733Speter
632266733Speter/* Done with badly written headers
633266733Speter */
634266733Speter#if defined(_MSC_VER) && _MSC_VER >= 1200
635266733Speter#pragma warning(pop)
636266733Speter#pragma warning(disable: 4996)
637266733Speter#endif
638266733Speter
639266733Speter#endif /* WIN32 */
640266733Speter
641266733Speter#endif /* APR_H */
642