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.h.in instead.
24251875Speter *
25251875Speter * And please, make an effort to stub apr.hw and apr.hnw in the process.
26251875Speter */
27251875Speter
28251875Speter/**
29251875Speter * @file apr.h
30251875Speter * @brief APR Platform Definitions
31251875Speter * @remark This is a generated header generated from include/apr.h.in by
32251875Speter * ./configure, or copied from include/apr.hw or include/apr.hnw 
33251875Speter * for Win32 or Netware by those build environments, respectively.
34251875Speter */
35251875Speter
36251875Speter/**
37251875Speter * @defgroup APR Apache Portability Runtime library
38251875Speter * @{
39251875Speter */
40251875Speter/**
41251875Speter * @defgroup apr_platform Platform Definitions
42251875Speter * @{
43251875Speter * @warning
44251875Speter * <strong><em>The actual values of macros and typedefs on this page<br>
45251875Speter * are platform specific and should NOT be relied upon!</em></strong>
46251875Speter */
47251875Speter
48251875Speter/* So that we can use inline on some critical functions, and use
49251875Speter * GNUC attributes (such as to get -Wall warnings for printf-like
50251875Speter * functions).  Only do this in gcc 2.7 or later ... it may work
51251875Speter * on earlier stuff, but why chance it.
52251875Speter *
53251875Speter * We've since discovered that the gcc shipped with NeXT systems
54251875Speter * as "cc" is completely broken.  It claims to be __GNUC__ and so
55251875Speter * on, but it doesn't implement half of the things that __GNUC__
56251875Speter * means.  In particular it's missing inline and the __attribute__
57251875Speter * stuff.  So we hack around it.  PR#1613. -djg
58251875Speter */
59251875Speter#if !defined(__GNUC__) || __GNUC__ < 2 || \
60251875Speter    (__GNUC__ == 2 && __GNUC_MINOR__ < 7) ||\
61251875Speter    defined(NEXT)
62251875Speter#ifndef __attribute__
63251875Speter#define __attribute__(__x)
64251875Speter#endif
65251875Speter#define APR_INLINE
66251875Speter#define APR_HAS_INLINE           0
67251875Speter#else
68251875Speter#define APR_INLINE __inline__
69251875Speter#define APR_HAS_INLINE           1
70251875Speter#endif
71251875Speter
72251875Speter#define APR_HAVE_ARPA_INET_H     @arpa_ineth@
73251875Speter#define APR_HAVE_CONIO_H         @conioh@
74251875Speter#define APR_HAVE_CRYPT_H         @crypth@
75251875Speter#define APR_HAVE_CTYPE_H         @ctypeh@
76251875Speter#define APR_HAVE_DIRENT_H        @direnth@
77251875Speter#define APR_HAVE_ERRNO_H         @errnoh@
78251875Speter#define APR_HAVE_FCNTL_H         @fcntlh@
79251875Speter#define APR_HAVE_IO_H            @ioh@
80251875Speter#define APR_HAVE_LIMITS_H        @limitsh@
81251875Speter#define APR_HAVE_NETDB_H         @netdbh@
82251875Speter#define APR_HAVE_NETINET_IN_H    @netinet_inh@
83251875Speter#define APR_HAVE_NETINET_SCTP_H  @netinet_sctph@
84251875Speter#define APR_HAVE_NETINET_SCTP_UIO_H @netinet_sctp_uioh@
85251875Speter#define APR_HAVE_NETINET_TCP_H   @netinet_tcph@
86251875Speter#define APR_HAVE_PROCESS_H       @processh@
87251875Speter#define APR_HAVE_PTHREAD_H       @pthreadh@
88251875Speter#define APR_HAVE_SEMAPHORE_H     @semaphoreh@
89251875Speter#define APR_HAVE_SIGNAL_H        @signalh@
90251875Speter#define APR_HAVE_STDARG_H        @stdargh@
91251875Speter#define APR_HAVE_STDINT_H        @stdint@
92251875Speter#define APR_HAVE_STDIO_H         @stdioh@
93251875Speter#define APR_HAVE_STDLIB_H        @stdlibh@
94251875Speter#define APR_HAVE_STRING_H        @stringh@
95251875Speter#define APR_HAVE_STRINGS_H       @stringsh@
96362181Sdim#define APR_HAVE_INTTYPES_H      @inttypesh@
97251875Speter#define APR_HAVE_SYS_IOCTL_H     @sys_ioctlh@
98251875Speter#define APR_HAVE_SYS_SENDFILE_H  @sys_sendfileh@
99251875Speter#define APR_HAVE_SYS_SIGNAL_H    @sys_signalh@
100251875Speter#define APR_HAVE_SYS_SOCKET_H    @sys_socketh@
101251875Speter#define APR_HAVE_SYS_SOCKIO_H    @sys_sockioh@
102251875Speter#define APR_HAVE_SYS_SYSLIMITS_H @sys_syslimitsh@
103251875Speter#define APR_HAVE_SYS_TIME_H      @sys_timeh@
104251875Speter#define APR_HAVE_SYS_TYPES_H     @sys_typesh@
105251875Speter#define APR_HAVE_SYS_UIO_H       @sys_uioh@
106251875Speter#define APR_HAVE_SYS_UN_H        @sys_unh@
107251875Speter#define APR_HAVE_SYS_WAIT_H      @sys_waith@
108251875Speter#define APR_HAVE_TIME_H          @timeh@
109251875Speter#define APR_HAVE_UNISTD_H        @unistdh@
110251875Speter#define APR_HAVE_WINDOWS_H       @windowsh@
111251875Speter#define APR_HAVE_WINSOCK2_H      @winsock2h@
112251875Speter
113251875Speter/** @} */
114251875Speter/** @} */
115251875Speter
116251875Speter/* We don't include our conditional headers within the doxyblocks 
117251875Speter * or the extern "C" namespace 
118251875Speter */
119251875Speter
120266735Speter#if APR_HAVE_WINDOWS_H && defined(WIN32)
121251875Speter/* If windows.h was already included, our preferences don't matter.
122251875Speter * If not, include a restricted set of windows headers to our tastes.
123251875Speter */
124251875Speter#ifndef _WINDOWS_
125251875Speter
126251875Speter#ifndef WIN32_LEAN_AND_MEAN
127251875Speter#define WIN32_LEAN_AND_MEAN
128251875Speter#endif
129251875Speter
130251875Speter#ifndef _WIN32_WINNT
131251875Speter/* Restrict the server to a subset of Windows XP header files by default
132251875Speter */
133251875Speter#define _WIN32_WINNT 0x0501
134251875Speter#endif
135251875Speter
136251875Speter#ifndef NOUSER
137251875Speter#define NOUSER
138251875Speter#endif
139251875Speter#ifndef NOMCX
140251875Speter#define NOMCX
141251875Speter#endif
142251875Speter#ifndef NOIME
143251875Speter#define NOIME
144251875Speter#endif
145251875Speter
146251875Speter#include <windows.h>
147251875Speter/* 
148251875Speter * Add a _very_few_ declarations missing from the restricted set of headers
149251875Speter * (If this list becomes extensive, re-enable the required headers above!)
150251875Speter * winsock headers were excluded by WIN32_LEAN_AND_MEAN, so include them now
151251875Speter */
152251875Speter#define SW_HIDE             0
153251875Speter#ifndef _WIN32_WCE
154251875Speter#include <winsock2.h>
155251875Speter#include <ws2tcpip.h>
156251875Speter#include <mswsock.h>
157251875Speter#else
158251875Speter#include <winsock.h>
159251875Speter#endif
160251875Speter
161251875Speter#endif /* ndef _WINDOWS_ */
162251875Speter#endif /* APR_HAVE_WINDOWS_H */
163251875Speter
164251875Speter#if APR_HAVE_SYS_TYPES_H
165251875Speter#include <sys/types.h>
166251875Speter#endif
167251875Speter
168251875Speter#if APR_HAVE_SYS_SOCKET_H
169251875Speter#include <sys/socket.h>
170251875Speter#endif
171251875Speter
172362181Sdim#if APR_HAVE_STDINT_H
173362181Sdim#ifdef __cplusplus
174251875Speter/* C99 7.18.4 requires that stdint.h only exposes INT64_C 
175251875Speter * and UINT64_C for C++ implementations if this is defined: */
176362181Sdim#ifndef __STDC_CONSTANT_MACROS
177251875Speter#define __STDC_CONSTANT_MACROS
178251875Speter#endif
179362181Sdim/* C++ needs this too for PRI*NN formats: */
180362181Sdim#ifndef __STDC_FORMAT_MACROS
181362181Sdim#define __STDC_FORMAT_MACROS
182362181Sdim#endif
183362181Sdim#endif /* __cplusplus */
184251875Speter#include <stdint.h>
185251875Speter#endif
186251875Speter
187362181Sdim#if APR_HAVE_INTTYPES_H
188362181Sdim#include <inttypes.h>
189362181Sdim#endif
190362181Sdim
191251875Speter#if APR_HAVE_SYS_WAIT_H
192251875Speter#include <sys/wait.h>
193251875Speter#endif
194251875Speter
195251875Speter#ifdef OS2
196251875Speter#define INCL_DOS
197251875Speter#define INCL_DOSERRORS
198251875Speter#include <os2.h>
199251875Speter#endif
200251875Speter
201251875Speter/* header files for PATH_MAX, _POSIX_PATH_MAX */
202251875Speter#if APR_HAVE_LIMITS_H
203251875Speter#include <limits.h>
204251875Speter#else
205251875Speter#if APR_HAVE_SYS_SYSLIMITS_H
206251875Speter#include <sys/syslimits.h>
207251875Speter#endif
208251875Speter#endif
209251875Speter
210362181Sdim/* __APPLE__ is now the official pre-defined macro for macOS */
211362181Sdim#ifdef __APPLE__
212362181Sdim#undef DARWIN
213362181Sdim#undef DARWIN_10
214362181Sdim#define DARWIN
215362181Sdim#define DARWIN_10
216362181Sdim#endif /* __APPLE__ */
217251875Speter
218251875Speter#ifdef __cplusplus
219251875Speterextern "C" {
220251875Speter#endif
221251875Speter
222251875Speter/**
223251875Speter * @addtogroup apr_platform
224251875Speter * @ingroup APR 
225251875Speter * @{
226251875Speter */
227251875Speter
228251875Speter#define APR_HAVE_SHMEM_MMAP_TMP     @havemmaptmp@
229251875Speter#define APR_HAVE_SHMEM_MMAP_SHM     @havemmapshm@
230251875Speter#define APR_HAVE_SHMEM_MMAP_ZERO    @havemmapzero@
231251875Speter#define APR_HAVE_SHMEM_SHMGET_ANON  @haveshmgetanon@
232251875Speter#define APR_HAVE_SHMEM_SHMGET       @haveshmget@
233251875Speter#define APR_HAVE_SHMEM_MMAP_ANON    @havemmapanon@
234251875Speter#define APR_HAVE_SHMEM_BEOS         @havebeosarea@
235251875Speter
236251875Speter#define APR_USE_SHMEM_MMAP_TMP     @usemmaptmp@
237251875Speter#define APR_USE_SHMEM_MMAP_SHM     @usemmapshm@
238251875Speter#define APR_USE_SHMEM_MMAP_ZERO    @usemmapzero@
239251875Speter#define APR_USE_SHMEM_SHMGET_ANON  @useshmgetanon@
240251875Speter#define APR_USE_SHMEM_SHMGET       @useshmget@
241251875Speter#define APR_USE_SHMEM_MMAP_ANON    @usemmapanon@
242251875Speter#define APR_USE_SHMEM_BEOS         @usebeosarea@
243251875Speter
244251875Speter#define APR_USE_FLOCK_SERIALIZE           @flockser@ 
245251875Speter#define APR_USE_SYSVSEM_SERIALIZE         @sysvser@
246251875Speter#define APR_USE_POSIXSEM_SERIALIZE        @posixser@
247251875Speter#define APR_USE_FCNTL_SERIALIZE           @fcntlser@
248251875Speter#define APR_USE_PROC_PTHREAD_SERIALIZE    @procpthreadser@ 
249251875Speter#define APR_USE_PTHREAD_SERIALIZE         @pthreadser@ 
250251875Speter
251251875Speter#define APR_HAS_FLOCK_SERIALIZE           @hasflockser@
252251875Speter#define APR_HAS_SYSVSEM_SERIALIZE         @hassysvser@
253251875Speter#define APR_HAS_POSIXSEM_SERIALIZE        @hasposixser@
254251875Speter#define APR_HAS_FCNTL_SERIALIZE           @hasfcntlser@
255251875Speter#define APR_HAS_PROC_PTHREAD_SERIALIZE    @hasprocpthreadser@
256251875Speter
257251875Speter#define APR_PROCESS_LOCK_IS_GLOBAL        @proclockglobal@
258251875Speter
259251875Speter#define APR_HAVE_CORKABLE_TCP   @have_corkable_tcp@ 
260251875Speter#define APR_HAVE_GETRLIMIT      @have_getrlimit@
261251875Speter#define APR_HAVE_IN_ADDR        @have_in_addr@
262251875Speter#define APR_HAVE_INET_ADDR      @have_inet_addr@
263251875Speter#define APR_HAVE_INET_NETWORK   @have_inet_network@
264251875Speter#define APR_HAVE_IPV6           @have_ipv6@
265362181Sdim#define APR_HAVE_SOCKADDR_UN    @have_sockaddr_un@
266251875Speter#define APR_HAVE_MEMMOVE        @have_memmove@
267251875Speter#define APR_HAVE_SETRLIMIT      @have_setrlimit@
268251875Speter#define APR_HAVE_SIGACTION      @have_sigaction@
269251875Speter#define APR_HAVE_SIGSUSPEND     @have_sigsuspend@
270251875Speter#define APR_HAVE_SIGWAIT        @have_sigwait@
271251875Speter#define APR_HAVE_SA_STORAGE     @have_sa_storage@
272251875Speter#define APR_HAVE_STRCASECMP     @have_strcasecmp@
273251875Speter#define APR_HAVE_STRDUP         @have_strdup@
274251875Speter#define APR_HAVE_STRICMP        @have_stricmp@
275251875Speter#define APR_HAVE_STRNCASECMP    @have_strncasecmp@
276251875Speter#define APR_HAVE_STRNICMP       @have_strnicmp@
277251875Speter#define APR_HAVE_STRSTR         @have_strstr@
278251875Speter#define APR_HAVE_MEMCHR         @have_memchr@
279251875Speter#define APR_HAVE_STRUCT_RLIMIT  @struct_rlimit@
280251875Speter#define APR_HAVE_UNION_SEMUN    @have_union_semun@
281251875Speter#define APR_HAVE_SCTP           @have_sctp@
282251875Speter#define APR_HAVE_IOVEC          @have_iovec@
283251875Speter
284251875Speter/*  APR Feature Macros */
285251875Speter#define APR_HAS_SHARED_MEMORY     @sharedmem@
286251875Speter#define APR_HAS_THREADS           @threads@
287251875Speter#define APR_HAS_SENDFILE          @sendfile@
288251875Speter#define APR_HAS_MMAP              @mmap@
289251875Speter#define APR_HAS_FORK              @fork@
290251875Speter#define APR_HAS_RANDOM            @rand@
291251875Speter#define APR_HAS_OTHER_CHILD       @oc@
292251875Speter#define APR_HAS_DSO               @aprdso@
293251875Speter#define APR_HAS_SO_ACCEPTFILTER   @acceptfilter@
294251875Speter#define APR_HAS_UNICODE_FS        @have_unicode_fs@
295251875Speter#define APR_HAS_PROC_INVOKED      @have_proc_invoked@
296251875Speter#define APR_HAS_USER              @apr_has_user@
297251875Speter#define APR_HAS_LARGE_FILES       @aprlfs@
298251875Speter#define APR_HAS_XTHREAD_FILES     @apr_has_xthread_files@
299251875Speter#define APR_HAS_OS_UUID           @osuuid@
300362181Sdim#define APR_HAS_TIMEDLOCKS        @apr_has_timedlocks@
301251875Speter
302251875Speter#define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD @apr_procattr_user_set_requires_password@
303251875Speter
304251875Speter/* APR sets APR_FILES_AS_SOCKETS to 1 on systems where it is possible
305251875Speter * to poll on files/pipes.
306251875Speter */
307251875Speter#define APR_FILES_AS_SOCKETS      @file_as_socket@
308251875Speter
309251875Speter/* This macro indicates whether or not EBCDIC is the native character set.
310251875Speter */
311251875Speter#define APR_CHARSET_EBCDIC        @apr_charset_ebcdic@
312251875Speter
313251875Speter/* If we have a TCP implementation that can be "corked", what flag
314251875Speter * do we use?
315251875Speter */
316251875Speter#define APR_TCP_NOPUSH_FLAG       @apr_tcp_nopush_flag@
317251875Speter
318251875Speter/* Is the TCP_NODELAY socket option inherited from listening sockets?
319251875Speter*/
320251875Speter#define APR_TCP_NODELAY_INHERITED @tcp_nodelay_inherited@
321251875Speter
322251875Speter/* Is the O_NONBLOCK flag inherited from listening sockets?
323251875Speter*/
324251875Speter#define APR_O_NONBLOCK_INHERITED @o_nonblock_inherited@
325251875Speter
326251875Speter/* Typedefs that APR needs. */
327251875Speter
328251875Spetertypedef  unsigned char           apr_byte_t;
329251875Speter
330251875Spetertypedef  @short_value@           apr_int16_t;
331251875Spetertypedef  unsigned @short_value@  apr_uint16_t;
332251875Speter
333251875Spetertypedef  @int_value@             apr_int32_t;
334251875Spetertypedef  unsigned @int_value@    apr_uint32_t;
335251875Speter
336251875Speter#define APR_SIZEOF_VOIDP @voidp_size@
337251875Speter
338251875Speter/*
339251875Speter * Darwin 10's default compiler (gcc42) builds for both 64 and
340251875Speter * 32 bit architectures unless specifically told not to.
341251875Speter * In those cases, we need to override types depending on how
342251875Speter * we're being built at compile time.
343251875Speter * NOTE: This is an ugly work-around for Darwin's
344251875Speter * concept of universal binaries, a single package
345251875Speter * (executable, lib, etc...) which contains both 32
346251875Speter * and 64 bit versions. The issue is that if APR is
347251875Speter * built universally, if something else is compiled
348251875Speter * against it, some bit sizes will depend on whether
349251875Speter * it is 32 or 64 bit. This is determined by the __LP64__
350251875Speter * flag. Since we need to support both, we have to
351251875Speter * handle OS X unqiuely.
352251875Speter */
353251875Speter#ifdef DARWIN_10
354251875Speter#undef APR_SIZEOF_VOIDP
355362181Sdim#undef APR_INT64_C
356362181Sdim#undef APR_UINT64_C
357251875Speter#ifdef __LP64__
358251875Speter typedef  long            apr_int64_t;
359251875Speter typedef  unsigned long   apr_uint64_t;
360251875Speter #define APR_SIZEOF_VOIDP     8
361362181Sdim #define APR_INT64_C(v)   (v ## L)
362362181Sdim #define APR_UINT64_C(v)  (v ## UL)
363251875Speter#else
364251875Speter typedef  long long            apr_int64_t;
365251875Speter typedef  unsigned long long   apr_uint64_t;
366251875Speter #define APR_SIZEOF_VOIDP     4
367362181Sdim #define APR_INT64_C(v)   (v ## LL)
368362181Sdim #define APR_UINT64_C(v)  (v ## ULL)
369251875Speter#endif
370251875Speter#else
371362181Sdim typedef  @int64_value@           apr_int64_t;
372362181Sdim typedef  @uint64_value@          apr_uint64_t;
373362181Sdim
374362181Sdim /* Mechanisms to properly type numeric literals */
375362181Sdim @int64_literal@
376362181Sdim @uint64_literal@
377251875Speter#endif
378251875Speter
379251875Spetertypedef  @size_t_value@          apr_size_t;
380251875Spetertypedef  @ssize_t_value@         apr_ssize_t;
381251875Spetertypedef  @off_t_value@           apr_off_t;
382251875Spetertypedef  @socklen_t_value@       apr_socklen_t;
383251875Spetertypedef  @ino_t_value@           apr_ino_t;
384251875Speter
385251875Speter#if APR_SIZEOF_VOIDP == 8
386251875Spetertypedef  apr_uint64_t            apr_uintptr_t;
387251875Speter#else
388251875Spetertypedef  apr_uint32_t            apr_uintptr_t;
389251875Speter#endif
390251875Speter
391251875Speter/* Are we big endian? */
392251875Speter#define APR_IS_BIGENDIAN	@bigendian@
393251875Speter
394251875Speter#ifdef INT16_MIN
395251875Speter#define APR_INT16_MIN   INT16_MIN
396251875Speter#else
397251875Speter#define APR_INT16_MIN   (-0x7fff - 1)
398251875Speter#endif
399251875Speter
400251875Speter#ifdef INT16_MAX
401251875Speter#define APR_INT16_MAX  INT16_MAX
402251875Speter#else
403251875Speter#define APR_INT16_MAX   (0x7fff)
404251875Speter#endif
405251875Speter
406251875Speter#ifdef UINT16_MAX
407251875Speter#define APR_UINT16_MAX  UINT16_MAX
408251875Speter#else
409251875Speter#define APR_UINT16_MAX  (0xffff)
410251875Speter#endif
411251875Speter
412251875Speter#ifdef INT32_MIN
413251875Speter#define APR_INT32_MIN   INT32_MIN
414251875Speter#else
415251875Speter#define APR_INT32_MIN   (-0x7fffffff - 1)
416251875Speter#endif
417251875Speter
418251875Speter#ifdef INT32_MAX
419251875Speter#define APR_INT32_MAX  INT32_MAX
420251875Speter#else
421251875Speter#define APR_INT32_MAX  0x7fffffff
422251875Speter#endif
423251875Speter
424251875Speter#ifdef UINT32_MAX
425251875Speter#define APR_UINT32_MAX  UINT32_MAX
426251875Speter#else
427251875Speter#define APR_UINT32_MAX  (0xffffffffU)
428251875Speter#endif
429251875Speter
430251875Speter#ifdef INT64_MIN
431251875Speter#define APR_INT64_MIN   INT64_MIN
432251875Speter#else
433251875Speter#define APR_INT64_MIN   (APR_INT64_C(-0x7fffffffffffffff) - 1)
434251875Speter#endif
435251875Speter
436251875Speter#ifdef INT64_MAX
437251875Speter#define APR_INT64_MAX   INT64_MAX
438251875Speter#else
439251875Speter#define APR_INT64_MAX   APR_INT64_C(0x7fffffffffffffff)
440251875Speter#endif
441251875Speter
442251875Speter#ifdef UINT64_MAX
443251875Speter#define APR_UINT64_MAX  UINT64_MAX
444251875Speter#else
445251875Speter#define APR_UINT64_MAX  APR_UINT64_C(0xffffffffffffffff)
446251875Speter#endif
447251875Speter
448251875Speter#define APR_SIZE_MAX    (~((apr_size_t)0))
449251875Speter
450251875Speter
451251875Speter/* Definitions that APR programs need to work properly. */
452251875Speter
453251875Speter/**
454251875Speter * APR public API wrap for C++ compilers.
455251875Speter */
456251875Speter#ifdef __cplusplus
457251875Speter#define APR_BEGIN_DECLS     extern "C" {
458251875Speter#define APR_END_DECLS       }
459251875Speter#else
460251875Speter#define APR_BEGIN_DECLS
461251875Speter#define APR_END_DECLS
462251875Speter#endif
463251875Speter
464251875Speter/** 
465251875Speter * Thread callbacks from APR functions must be declared with APR_THREAD_FUNC, 
466251875Speter * so that they follow the platform's calling convention.
467251875Speter * <PRE>
468251875Speter *
469251875Speter * void* APR_THREAD_FUNC my_thread_entry_fn(apr_thread_t *thd, void *data);
470251875Speter *
471251875Speter * </PRE>
472251875Speter */
473251875Speter#define APR_THREAD_FUNC       @apr_thread_func@
474251875Speter
475266735Speter#if defined(DOXYGEN) || !defined(WIN32)
476266735Speter
477251875Speter/**
478251875Speter * The public APR functions are declared with APR_DECLARE(), so they may
479251875Speter * use the most appropriate calling convention.  Public APR functions with 
480251875Speter * variable arguments must use APR_DECLARE_NONSTD().
481251875Speter *
482251875Speter * @remark Both the declaration and implementations must use the same macro.
483251875Speter *
484251875Speter * <PRE>
485251875Speter * APR_DECLARE(rettype) apr_func(args)
486251875Speter * </PRE>
487251875Speter * @see APR_DECLARE_NONSTD @see APR_DECLARE_DATA
488251875Speter * @remark Note that when APR compiles the library itself, it passes the 
489251875Speter * symbol -DAPR_DECLARE_EXPORT to the compiler on some platforms (e.g. Win32) 
490251875Speter * to export public symbols from the dynamic library build.\n
491251875Speter * The user must define the APR_DECLARE_STATIC when compiling to target
492251875Speter * the static APR library on some platforms (e.g. Win32.)  The public symbols 
493251875Speter * are neither exported nor imported when APR_DECLARE_STATIC is defined.\n
494251875Speter * By default, compiling an application and including the APR public
495251875Speter * headers, without defining APR_DECLARE_STATIC, will prepare the code to be
496251875Speter * linked to the dynamic library.
497251875Speter */
498251875Speter#define APR_DECLARE(type)            type 
499251875Speter
500251875Speter/**
501251875Speter * The public APR functions using variable arguments are declared with 
502251875Speter * APR_DECLARE_NONSTD(), as they must follow the C language calling convention.
503251875Speter * @see APR_DECLARE @see APR_DECLARE_DATA
504251875Speter * @remark Both the declaration and implementations must use the same macro.
505251875Speter * <PRE>
506251875Speter *
507251875Speter * APR_DECLARE_NONSTD(rettype) apr_func(args, ...);
508251875Speter *
509251875Speter * </PRE>
510251875Speter */
511251875Speter#define APR_DECLARE_NONSTD(type)     type
512251875Speter
513251875Speter/**
514251875Speter * The public APR variables are declared with AP_MODULE_DECLARE_DATA.
515251875Speter * This assures the appropriate indirection is invoked at compile time.
516251875Speter * @see APR_DECLARE @see APR_DECLARE_NONSTD
517251875Speter * @remark Note that the declaration and implementations use different forms,
518251875Speter * but both must include the macro.
519251875Speter * 
520251875Speter * <PRE>
521251875Speter *
522251875Speter * extern APR_DECLARE_DATA type apr_variable;\n
523251875Speter * APR_DECLARE_DATA type apr_variable = value;
524251875Speter *
525251875Speter * </PRE>
526251875Speter */
527251875Speter#define APR_DECLARE_DATA
528251875Speter
529266735Speter#elif defined(APR_DECLARE_STATIC)
530266735Speter#define APR_DECLARE(type)            type __stdcall
531266735Speter#define APR_DECLARE_NONSTD(type)     type __cdecl
532266735Speter#define APR_DECLARE_DATA
533266735Speter#elif defined(APR_DECLARE_EXPORT)
534266735Speter#define APR_DECLARE(type)            __declspec(dllexport) type __stdcall
535266735Speter#define APR_DECLARE_NONSTD(type)     __declspec(dllexport) type __cdecl
536266735Speter#define APR_DECLARE_DATA             __declspec(dllexport)
537266735Speter#else
538266735Speter#define APR_DECLARE(type)            __declspec(dllimport) type __stdcall
539266735Speter#define APR_DECLARE_NONSTD(type)     __declspec(dllimport) type __cdecl
540266735Speter#define APR_DECLARE_DATA             __declspec(dllimport)
541266735Speter#endif
542266735Speter
543251875Speter/* Define APR_SSIZE_T_FMT.  
544251875Speter * If ssize_t is an integer we define it to be "d",
545251875Speter * if ssize_t is a long int we define it to be "ld",
546251875Speter * if ssize_t is neither we declare an error here.
547251875Speter * I looked for a better way to define this here, but couldn't find one, so
548251875Speter * to find the logic for this definition search for "ssize_t_fmt" in
549251875Speter * configure.in.
550251875Speter */
551251875Speter
552251875Speter@ssize_t_fmt@
553251875Speter
554251875Speter/* And APR_SIZE_T_FMT */
555251875Speter@size_t_fmt@
556251875Speter
557251875Speter/* And APR_OFF_T_FMT */
558251875Speter@off_t_fmt@
559251875Speter
560251875Speter/* And APR_PID_T_FMT */
561251875Speter@pid_t_fmt@
562251875Speter
563251875Speter/* And APR_INT64_T_FMT */
564251875Speter@int64_t_fmt@
565251875Speter
566251875Speter/* And APR_UINT64_T_FMT */
567251875Speter@uint64_t_fmt@
568251875Speter
569251875Speter/* And APR_UINT64_T_HEX_FMT */
570251875Speter@uint64_t_hex_fmt@
571251875Speter
572251875Speter/*
573251875Speter * Ensure we work with universal binaries on Darwin
574251875Speter */
575251875Speter#ifdef DARWIN_10
576251875Speter
577251875Speter#undef APR_HAS_LARGE_FILES
578251875Speter#undef APR_SIZEOF_VOIDP
579251875Speter#undef APR_INT64_T_FMT
580251875Speter#undef APR_UINT64_T_FMT
581251875Speter#undef APR_UINT64_T_HEX_FMT
582251875Speter
583251875Speter#ifdef __LP64__
584251875Speter #define APR_HAS_LARGE_FILES  0
585251875Speter #define APR_SIZEOF_VOIDP     8
586251875Speter #define APR_INT64_T_FMT      "ld"
587251875Speter #define APR_UINT64_T_FMT     "lu"
588251875Speter #define APR_UINT64_T_HEX_FMT "lx"
589251875Speter#else
590251875Speter #define APR_HAS_LARGE_FILES  1
591251875Speter #define APR_SIZEOF_VOIDP     4
592251875Speter #define APR_INT64_T_FMT      "lld"
593251875Speter #define APR_UINT64_T_FMT     "llu"
594251875Speter #define APR_UINT64_T_HEX_FMT "llx"
595251875Speter#endif
596251875Speter
597251875Speter#undef APR_IS_BIGENDIAN
598251875Speter#ifdef __BIG_ENDIAN__
599251875Speter #define APR_IS_BIGENDIAN	1
600251875Speter#else
601251875Speter #define APR_IS_BIGENDIAN	0
602251875Speter#endif
603251875Speter
604251875Speter#undef APR_OFF_T_FMT
605251875Speter#define APR_OFF_T_FMT "lld"
606251875Speter
607251875Speter#endif /* DARWIN_10 */
608251875Speter
609251875Speter/* Does the proc mutex lock threads too */
610251875Speter#define APR_PROC_MUTEX_IS_GLOBAL      @proc_mutex_is_global@
611251875Speter
612251875Speter/* Local machine definition for console and log output. */
613251875Speter#define APR_EOL_STR              "@eolstr@"
614251875Speter
615251875Speter#if APR_HAVE_SYS_WAIT_H
616251875Speter#ifdef WEXITSTATUS
617251875Speter#define apr_wait_t       int
618251875Speter#else
619251875Speter#define apr_wait_t       union wait
620251875Speter#define WEXITSTATUS(status)    (int)((status).w_retcode)
621251875Speter#define WTERMSIG(status)       (int)((status).w_termsig)
622251875Speter#endif /* !WEXITSTATUS */
623251875Speter#elif defined(__MINGW32__)
624251875Spetertypedef int apr_wait_t;
625251875Speter#endif /* HAVE_SYS_WAIT_H */
626251875Speter
627251875Speter#if defined(PATH_MAX)
628251875Speter#define APR_PATH_MAX       PATH_MAX
629251875Speter#elif defined(_POSIX_PATH_MAX)
630251875Speter#define APR_PATH_MAX       _POSIX_PATH_MAX
631251875Speter#else
632251875Speter#error no decision has been made on APR_PATH_MAX for your platform
633251875Speter#endif
634251875Speter
635251875Speter#define APR_DSOPATH "@shlibpath_var@"
636251875Speter
637251875Speter/** @} */
638251875Speter
639251875Speter/* Definitions that only Win32 programs need to compile properly. */
640251875Speter
641251875Speter/* XXX These simply don't belong here, perhaps in apr_portable.h
642251875Speter * based on some APR_HAVE_PID/GID/UID?
643251875Speter */
644251875Speter#ifdef __MINGW32__
645251875Speter#ifndef __GNUC__
646251875Spetertypedef  int         pid_t;
647251875Speter#endif
648251875Spetertypedef  int         uid_t;
649251875Spetertypedef  int         gid_t;
650251875Speter#endif
651251875Speter
652251875Speter#ifdef __cplusplus
653251875Speter}
654251875Speter#endif
655251875Speter
656251875Speter#endif /* APR_H */
657