1251886Speter/* $FreeBSD$ */
2251886Speter
3251886Speter/* Licensed to the Apache Software Foundation (ASF) under one or more
4251886Speter * contributor license agreements.  See the NOTICE file distributed with
5251886Speter * this work for additional information regarding copyright ownership.
6251886Speter * The ASF licenses this file to You under the Apache License, Version 2.0
7251886Speter * (the "License"); you may not use this file except in compliance with
8251886Speter * the License.  You may obtain a copy of the License at
9251886Speter *
10251886Speter *     http://www.apache.org/licenses/LICENSE-2.0
11251886Speter *
12251886Speter * Unless required by applicable law or agreed to in writing, software
13251886Speter * distributed under the License is distributed on an "AS IS" BASIS,
14251886Speter * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15251886Speter * See the License for the specific language governing permissions and
16251886Speter * limitations under the License.
17251886Speter */
18251886Speter
19251886Speter
20251886Speter#ifndef APR_H
21251886Speter#define APR_H
22251886Speter
23251886Speter/* GENERATED FILE WARNING!  DO NOT EDIT apr.h
24251886Speter *
25251886Speter * You must modify apr.h.in instead.
26251886Speter *
27251886Speter * And please, make an effort to stub apr.hw and apr.hnw in the process.
28251886Speter */
29251886Speter
30251886Speter/**
31251886Speter * @file apr.h
32251886Speter * @brief APR Platform Definitions
33251886Speter * @remark This is a generated header generated from include/apr.h.in by
34251886Speter * ./configure, or copied from include/apr.hw or include/apr.hnw
35251886Speter * for Win32 or Netware by those build environments, respectively.
36251886Speter */
37251886Speter
38251886Speter/**
39251886Speter * @defgroup APR Apache Portability Runtime library
40251886Speter * @{
41251886Speter */
42251886Speter/**
43251886Speter * @defgroup apr_platform Platform Definitions
44251886Speter * @{
45251886Speter * @warning
46251886Speter * <strong><em>The actual values of macros and typedefs on this page<br>
47251886Speter * are platform specific and should NOT be relied upon!</em></strong>
48251886Speter */
49251886Speter
50251886Speter/* So that we can use inline on some critical functions, and use
51251886Speter * GNUC attributes (such as to get -Wall warnings for printf-like
52251886Speter * functions).  Only do this in gcc 2.7 or later ... it may work
53251886Speter * on earlier stuff, but why chance it.
54251886Speter *
55251886Speter * We've since discovered that the gcc shipped with NeXT systems
56251886Speter * as "cc" is completely broken.  It claims to be __GNUC__ and so
57251886Speter * on, but it doesn't implement half of the things that __GNUC__
58251886Speter * means.  In particular it's missing inline and the __attribute__
59251886Speter * stuff.  So we hack around it.  PR#1613. -djg
60251886Speter */
61251886Speter#if !defined(__GNUC__) || __GNUC__ < 2 || \
62251886Speter    (__GNUC__ == 2 && __GNUC_MINOR__ < 7) ||\
63251886Speter    defined(NEXT)
64251886Speter#ifndef __attribute__
65251886Speter#define __attribute__(__x)
66251886Speter#endif
67251886Speter#define APR_INLINE
68251886Speter#define APR_HAS_INLINE           0
69251886Speter#else
70251886Speter#define APR_INLINE __inline__
71251886Speter#define APR_HAS_INLINE           1
72251886Speter#endif
73251886Speter
74251886Speter#define APR_HAVE_ARPA_INET_H     1
75251886Speter#define APR_HAVE_CONIO_H         0
76251886Speter#define APR_HAVE_CRYPT_H         0
77251886Speter#define APR_HAVE_CTYPE_H         1
78251886Speter#define APR_HAVE_DIRENT_H        1
79251886Speter#define APR_HAVE_ERRNO_H         1
80251886Speter#define APR_HAVE_FCNTL_H         1
81251886Speter#define APR_HAVE_IO_H            0
82251886Speter#define APR_HAVE_LIMITS_H        1
83251886Speter#define APR_HAVE_NETDB_H         1
84251886Speter#define APR_HAVE_NETINET_IN_H    1
85251886Speter#define APR_HAVE_NETINET_SCTP_H  1
86251886Speter#define APR_HAVE_NETINET_SCTP_UIO_H 1
87251886Speter#define APR_HAVE_NETINET_TCP_H   1
88251886Speter#define APR_HAVE_PROCESS_H       0
89251886Speter#define APR_HAVE_PTHREAD_H       1
90251886Speter#define APR_HAVE_SEMAPHORE_H     1
91251886Speter#define APR_HAVE_SIGNAL_H        1
92251886Speter#define APR_HAVE_STDARG_H        1
93251886Speter#define APR_HAVE_STDINT_H        1
94251886Speter#define APR_HAVE_STDIO_H         1
95251886Speter#define APR_HAVE_STDLIB_H        1
96251886Speter#define APR_HAVE_STRING_H        1
97251886Speter#define APR_HAVE_STRINGS_H       1
98251886Speter#define APR_HAVE_SYS_IOCTL_H     1
99251886Speter#define APR_HAVE_SYS_SENDFILE_H  0
100251886Speter#define APR_HAVE_SYS_SIGNAL_H    1
101251886Speter#define APR_HAVE_SYS_SOCKET_H    1
102251886Speter#define APR_HAVE_SYS_SOCKIO_H    1
103251886Speter#define APR_HAVE_SYS_SYSLIMITS_H 1
104251886Speter#define APR_HAVE_SYS_TIME_H      1
105251886Speter#define APR_HAVE_SYS_TYPES_H     1
106251886Speter#define APR_HAVE_SYS_UIO_H       1
107251886Speter#define APR_HAVE_SYS_UN_H        1
108251886Speter#define APR_HAVE_SYS_WAIT_H      1
109251886Speter#define APR_HAVE_TIME_H          1
110251886Speter#define APR_HAVE_UNISTD_H        1
111251886Speter#define APR_HAVE_WINDOWS_H       0
112251886Speter#define APR_HAVE_WINSOCK2_H      0
113251886Speter
114251886Speter/** @} */
115251886Speter/** @} */
116251886Speter
117251886Speter/* We don't include our conditional headers within the doxyblocks
118251886Speter * or the extern "C" namespace
119251886Speter */
120251886Speter
121251886Speter#if APR_HAVE_WINDOWS_H
122251886Speter/* If windows.h was already included, our preferences don't matter.
123251886Speter * If not, include a restricted set of windows headers to our tastes.
124251886Speter */
125251886Speter#ifndef _WINDOWS_
126251886Speter
127251886Speter#ifndef WIN32_LEAN_AND_MEAN
128251886Speter#define WIN32_LEAN_AND_MEAN
129251886Speter#endif
130251886Speter
131251886Speter#ifndef _WIN32_WINNT
132251886Speter/* Restrict the server to a subset of Windows XP header files by default
133251886Speter */
134251886Speter#define _WIN32_WINNT 0x0501
135251886Speter#endif
136251886Speter
137251886Speter#ifndef NOUSER
138251886Speter#define NOUSER
139251886Speter#endif
140251886Speter#ifndef NOMCX
141251886Speter#define NOMCX
142251886Speter#endif
143251886Speter#ifndef NOIME
144251886Speter#define NOIME
145251886Speter#endif
146251886Speter
147251886Speter#include <windows.h>
148251886Speter/*
149251886Speter * Add a _very_few_ declarations missing from the restricted set of headers
150251886Speter * (If this list becomes extensive, re-enable the required headers above!)
151251886Speter * winsock headers were excluded by WIN32_LEAN_AND_MEAN, so include them now
152251886Speter */
153251886Speter#define SW_HIDE             0
154251886Speter#ifndef _WIN32_WCE
155251886Speter#include <winsock2.h>
156251886Speter#include <ws2tcpip.h>
157251886Speter#include <mswsock.h>
158251886Speter#else
159251886Speter#include <winsock.h>
160251886Speter#endif
161251886Speter
162251886Speter#endif /* ndef _WINDOWS_ */
163251886Speter#endif /* APR_HAVE_WINDOWS_H */
164251886Speter
165251886Speter#if APR_HAVE_SYS_TYPES_H
166251886Speter#include <sys/types.h>
167251886Speter#endif
168251886Speter
169251886Speter#if APR_HAVE_SYS_SOCKET_H
170251886Speter#include <sys/socket.h>
171251886Speter#endif
172251886Speter
173251886Speter#if defined(__cplusplus) && !defined(__STDC_CONSTANT_MACROS)
174251886Speter/* C99 7.18.4 requires that stdint.h only exposes INT64_C
175251886Speter * and UINT64_C for C++ implementations if this is defined: */
176251886Speter#define __STDC_CONSTANT_MACROS
177251886Speter#endif
178251886Speter
179251886Speter#if APR_HAVE_STDINT_H
180251886Speter#include <stdint.h>
181251886Speter#endif
182251886Speter
183251886Speter#if APR_HAVE_SYS_WAIT_H
184251886Speter#include <sys/wait.h>
185251886Speter#endif
186251886Speter
187251886Speter#ifdef OS2
188251886Speter#define INCL_DOS
189251886Speter#define INCL_DOSERRORS
190251886Speter#include <os2.h>
191251886Speter#endif
192251886Speter
193251886Speter/* header files for PATH_MAX, _POSIX_PATH_MAX */
194251886Speter#if APR_HAVE_LIMITS_H
195251886Speter#include <limits.h>
196251886Speter#else
197251886Speter#if APR_HAVE_SYS_SYSLIMITS_H
198251886Speter#include <sys/syslimits.h>
199251886Speter#endif
200251886Speter#endif
201251886Speter
202251886Speter
203251886Speter#ifdef __cplusplus
204251886Speterextern "C" {
205251886Speter#endif
206251886Speter
207251886Speter/**
208251886Speter * @addtogroup apr_platform
209251886Speter * @ingroup APR
210251886Speter * @{
211251886Speter */
212251886Speter
213251886Speter#define APR_HAVE_SHMEM_MMAP_TMP     1
214251886Speter#define APR_HAVE_SHMEM_MMAP_SHM     1
215251886Speter#define APR_HAVE_SHMEM_MMAP_ZERO    1
216251886Speter#define APR_HAVE_SHMEM_SHMGET_ANON  1
217251886Speter#define APR_HAVE_SHMEM_SHMGET       1
218251886Speter#define APR_HAVE_SHMEM_MMAP_ANON    1
219251886Speter#define APR_HAVE_SHMEM_BEOS         0
220251886Speter
221251886Speter#define APR_USE_SHMEM_MMAP_TMP     0
222251886Speter#define APR_USE_SHMEM_MMAP_SHM     0
223251886Speter#define APR_USE_SHMEM_MMAP_ZERO    0
224251886Speter#define APR_USE_SHMEM_SHMGET_ANON  0
225251886Speter#define APR_USE_SHMEM_SHMGET       1
226251886Speter#define APR_USE_SHMEM_MMAP_ANON    1
227251886Speter#define APR_USE_SHMEM_BEOS         0
228251886Speter
229251886Speter#define APR_USE_FLOCK_SERIALIZE           1
230251886Speter#define APR_USE_SYSVSEM_SERIALIZE         0
231251886Speter#define APR_USE_POSIXSEM_SERIALIZE        0
232251886Speter#define APR_USE_FCNTL_SERIALIZE           0
233251886Speter#define APR_USE_PROC_PTHREAD_SERIALIZE    0
234251886Speter#define APR_USE_PTHREAD_SERIALIZE         1
235251886Speter
236251886Speter#define APR_HAS_FLOCK_SERIALIZE           1
237251886Speter#define APR_HAS_SYSVSEM_SERIALIZE         1
238251886Speter#define APR_HAS_POSIXSEM_SERIALIZE        1
239251886Speter#define APR_HAS_FCNTL_SERIALIZE           1
240251886Speter#define APR_HAS_PROC_PTHREAD_SERIALIZE    0
241251886Speter
242251886Speter#define APR_PROCESS_LOCK_IS_GLOBAL        0
243251886Speter
244251886Speter#define APR_HAVE_CORKABLE_TCP   1
245251886Speter#define APR_HAVE_GETRLIMIT      1
246251886Speter#define APR_HAVE_IN_ADDR        1
247251886Speter#define APR_HAVE_INET_ADDR      1
248251886Speter#define APR_HAVE_INET_NETWORK   1
249251886Speter#define APR_HAVE_IPV6           1
250251886Speter#define APR_HAVE_MEMMOVE        1
251251886Speter#define APR_HAVE_SETRLIMIT      1
252251886Speter#define APR_HAVE_SIGACTION      1
253251886Speter#define APR_HAVE_SIGSUSPEND     1
254251886Speter#define APR_HAVE_SIGWAIT        1
255251886Speter#define APR_HAVE_SA_STORAGE     1
256251886Speter#define APR_HAVE_STRCASECMP     1
257251886Speter#define APR_HAVE_STRDUP         1
258251886Speter#define APR_HAVE_STRICMP        0
259251886Speter#define APR_HAVE_STRNCASECMP    1
260251886Speter#define APR_HAVE_STRNICMP       0
261251886Speter#define APR_HAVE_STRSTR         1
262251886Speter#define APR_HAVE_MEMCHR         1
263251886Speter#define APR_HAVE_STRUCT_RLIMIT  1
264251886Speter#define APR_HAVE_UNION_SEMUN    1
265251886Speter#define APR_HAVE_SCTP           1
266251886Speter#define APR_HAVE_IOVEC          1
267251886Speter
268251886Speter/*  APR Feature Macros */
269251886Speter#define APR_HAS_SHARED_MEMORY     1
270251886Speter#define APR_HAS_THREADS           1
271251886Speter#define APR_HAS_SENDFILE          1
272251886Speter#define APR_HAS_MMAP              1
273251886Speter#define APR_HAS_FORK              1
274251886Speter#define APR_HAS_RANDOM            1
275251886Speter#define APR_HAS_OTHER_CHILD       1
276251886Speter#define APR_HAS_DSO               0
277251886Speter#define APR_HAS_SO_ACCEPTFILTER   1
278251886Speter#define APR_HAS_UNICODE_FS        0
279251886Speter#define APR_HAS_PROC_INVOKED      0
280251886Speter#define APR_HAS_USER              1
281251886Speter#define APR_HAS_LARGE_FILES       0
282251886Speter#define APR_HAS_XTHREAD_FILES     0
283251886Speter#define APR_HAS_OS_UUID           1
284251886Speter
285251886Speter#define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD 0
286251886Speter
287251886Speter/* APR sets APR_FILES_AS_SOCKETS to 1 on systems where it is possible
288251886Speter * to poll on files/pipes.
289251886Speter */
290251886Speter#define APR_FILES_AS_SOCKETS      1
291251886Speter
292251886Speter/* This macro indicates whether or not EBCDIC is the native character set.
293251886Speter */
294251886Speter#define APR_CHARSET_EBCDIC        0
295251886Speter
296251886Speter/* If we have a TCP implementation that can be "corked", what flag
297251886Speter * do we use?
298251886Speter */
299251886Speter#define APR_TCP_NOPUSH_FLAG       TCP_NOPUSH
300251886Speter
301251886Speter/* Is the TCP_NODELAY socket option inherited from listening sockets?
302251886Speter*/
303251886Speter#define APR_TCP_NODELAY_INHERITED 1
304251886Speter
305251886Speter/* Is the O_NONBLOCK flag inherited from listening sockets?
306251886Speter*/
307251886Speter#define APR_O_NONBLOCK_INHERITED 1
308251886Speter
309251886Speter/* Typedefs that APR needs. */
310251886Speter
311251886Spetertypedef  unsigned char           apr_byte_t;
312251886Speter
313251886Spetertypedef  short           apr_int16_t;
314251886Spetertypedef  unsigned short  apr_uint16_t;
315251886Speter
316251886Spetertypedef  int             apr_int32_t;
317251886Spetertypedef  unsigned int    apr_uint32_t;
318251886Speter
319251953Speter#include <sys/_types.h>
320251953Speter#ifdef __LP64__
321251886Speter#define APR_SIZEOF_VOIDP 8
322251953Speter#else
323251953Speter#define APR_SIZEOF_VOIDP 4
324251953Speter#endif
325251886Speter
326251886Speter/*
327251886Speter * Darwin 10's default compiler (gcc42) builds for both 64 and
328251886Speter * 32 bit architectures unless specifically told not to.
329251886Speter * In those cases, we need to override types depending on how
330251886Speter * we're being built at compile time.
331251886Speter * NOTE: This is an ugly work-around for Darwin's
332251886Speter * concept of universal binaries, a single package
333251886Speter * (executable, lib, etc...) which contains both 32
334251886Speter * and 64 bit versions. The issue is that if APR is
335251886Speter * built universally, if something else is compiled
336251886Speter * against it, some bit sizes will depend on whether
337251886Speter * it is 32 or 64 bit. This is determined by the __LP64__
338251886Speter * flag. Since we need to support both, we have to
339251886Speter * handle OS X unqiuely.
340251886Speter */
341251886Speter#ifdef DARWIN_10
342251886Speter#undef APR_SIZEOF_VOIDP
343251886Speter#undef INT64_C
344251886Speter#undef UINT64_C
345251886Speter#ifdef __LP64__
346251886Speter typedef  long            apr_int64_t;
347251886Speter typedef  unsigned long   apr_uint64_t;
348251886Speter #define APR_SIZEOF_VOIDP     8
349251886Speter #define INT64_C(v)   (v ## L)
350251886Speter #define UINT64_C(v)  (v ## UL)
351251886Speter#else
352251886Speter typedef  long long            apr_int64_t;
353251886Speter typedef  unsigned long long   apr_uint64_t;
354251886Speter #define APR_SIZEOF_VOIDP     4
355251886Speter #define INT64_C(v)   (v ## LL)
356251886Speter #define UINT64_C(v)  (v ## ULL)
357251886Speter#endif
358251886Speter#else
359251953Speter typedef  __int64_t            apr_int64_t;
360251953Speter typedef  __uint64_t           apr_uint64_t;
361251886Speter#endif
362251886Speter
363251886Spetertypedef  size_t          apr_size_t;
364251886Spetertypedef  ssize_t         apr_ssize_t;
365251886Spetertypedef  off_t           apr_off_t;
366251886Spetertypedef  socklen_t       apr_socklen_t;
367251886Spetertypedef  unsigned int           apr_ino_t;
368251886Speter
369251886Speter#if APR_SIZEOF_VOIDP == 8
370251886Spetertypedef  apr_uint64_t            apr_uintptr_t;
371251886Speter#else
372251886Spetertypedef  apr_uint32_t            apr_uintptr_t;
373251886Speter#endif
374251886Speter
375251886Speter/* Are we big endian? */
376255696Sdim#if _BYTE_ORDER == _LITTLE_ENDIAN
377251886Speter#define APR_IS_BIGENDIAN	0
378255696Sdim#elif _BYTE_ORDER == _BIG_ENDIAN
379255696Sdim#define APR_IS_BIGENDIAN	1
380255696Sdim#else
381255696Sdim#error Unknown byte order.
382255696Sdim#endif
383251886Speter
384251886Speter/* Mechanisms to properly type numeric literals */
385251886Speter#define APR_INT64_C(val) INT64_C(val)
386251886Speter#define APR_UINT64_C(val) UINT64_C(val)
387251886Speter
388251886Speter#ifdef INT16_MIN
389251886Speter#define APR_INT16_MIN   INT16_MIN
390251886Speter#else
391251886Speter#define APR_INT16_MIN   (-0x7fff - 1)
392251886Speter#endif
393251886Speter
394251886Speter#ifdef INT16_MAX
395251886Speter#define APR_INT16_MAX  INT16_MAX
396251886Speter#else
397251886Speter#define APR_INT16_MAX   (0x7fff)
398251886Speter#endif
399251886Speter
400251886Speter#ifdef UINT16_MAX
401251886Speter#define APR_UINT16_MAX  UINT16_MAX
402251886Speter#else
403251886Speter#define APR_UINT16_MAX  (0xffff)
404251886Speter#endif
405251886Speter
406251886Speter#ifdef INT32_MIN
407251886Speter#define APR_INT32_MIN   INT32_MIN
408251886Speter#else
409251886Speter#define APR_INT32_MIN   (-0x7fffffff - 1)
410251886Speter#endif
411251886Speter
412251886Speter#ifdef INT32_MAX
413251886Speter#define APR_INT32_MAX  INT32_MAX
414251886Speter#else
415251886Speter#define APR_INT32_MAX  0x7fffffff
416251886Speter#endif
417251886Speter
418251886Speter#ifdef UINT32_MAX
419251886Speter#define APR_UINT32_MAX  UINT32_MAX
420251886Speter#else
421251886Speter#define APR_UINT32_MAX  (0xffffffffU)
422251886Speter#endif
423251886Speter
424251886Speter#ifdef INT64_MIN
425251886Speter#define APR_INT64_MIN   INT64_MIN
426251886Speter#else
427251886Speter#define APR_INT64_MIN   (APR_INT64_C(-0x7fffffffffffffff) - 1)
428251886Speter#endif
429251886Speter
430251886Speter#ifdef INT64_MAX
431251886Speter#define APR_INT64_MAX   INT64_MAX
432251886Speter#else
433251886Speter#define APR_INT64_MAX   APR_INT64_C(0x7fffffffffffffff)
434251886Speter#endif
435251886Speter
436251886Speter#ifdef UINT64_MAX
437251886Speter#define APR_UINT64_MAX  UINT64_MAX
438251886Speter#else
439251886Speter#define APR_UINT64_MAX  APR_UINT64_C(0xffffffffffffffff)
440251886Speter#endif
441251886Speter
442251886Speter#define APR_SIZE_MAX    (~((apr_size_t)0))
443251886Speter
444251886Speter
445251886Speter/* Definitions that APR programs need to work properly. */
446251886Speter
447251886Speter/**
448251886Speter * APR public API wrap for C++ compilers.
449251886Speter */
450251886Speter#ifdef __cplusplus
451251886Speter#define APR_BEGIN_DECLS     extern "C" {
452251886Speter#define APR_END_DECLS       }
453251886Speter#else
454251886Speter#define APR_BEGIN_DECLS
455251886Speter#define APR_END_DECLS
456251886Speter#endif
457251886Speter
458251886Speter/**
459251886Speter * Thread callbacks from APR functions must be declared with APR_THREAD_FUNC,
460251886Speter * so that they follow the platform's calling convention.
461251886Speter * <PRE>
462251886Speter *
463251886Speter * void* APR_THREAD_FUNC my_thread_entry_fn(apr_thread_t *thd, void *data);
464251886Speter *
465251886Speter * </PRE>
466251886Speter */
467251886Speter#define APR_THREAD_FUNC
468251886Speter
469251886Speter/**
470251886Speter * The public APR functions are declared with APR_DECLARE(), so they may
471251886Speter * use the most appropriate calling convention.  Public APR functions with
472251886Speter * variable arguments must use APR_DECLARE_NONSTD().
473251886Speter *
474251886Speter * @remark Both the declaration and implementations must use the same macro.
475251886Speter *
476251886Speter * <PRE>
477251886Speter * APR_DECLARE(rettype) apr_func(args)
478251886Speter * </PRE>
479251886Speter * @see APR_DECLARE_NONSTD @see APR_DECLARE_DATA
480251886Speter * @remark Note that when APR compiles the library itself, it passes the
481251886Speter * symbol -DAPR_DECLARE_EXPORT to the compiler on some platforms (e.g. Win32)
482251886Speter * to export public symbols from the dynamic library build.\n
483251886Speter * The user must define the APR_DECLARE_STATIC when compiling to target
484251886Speter * the static APR library on some platforms (e.g. Win32.)  The public symbols
485251886Speter * are neither exported nor imported when APR_DECLARE_STATIC is defined.\n
486251886Speter * By default, compiling an application and including the APR public
487251886Speter * headers, without defining APR_DECLARE_STATIC, will prepare the code to be
488251886Speter * linked to the dynamic library.
489251886Speter */
490251886Speter#define APR_DECLARE(type)            type
491251886Speter
492251886Speter/**
493251886Speter * The public APR functions using variable arguments are declared with
494251886Speter * APR_DECLARE_NONSTD(), as they must follow the C language calling convention.
495251886Speter * @see APR_DECLARE @see APR_DECLARE_DATA
496251886Speter * @remark Both the declaration and implementations must use the same macro.
497251886Speter * <PRE>
498251886Speter *
499251886Speter * APR_DECLARE_NONSTD(rettype) apr_func(args, ...);
500251886Speter *
501251886Speter * </PRE>
502251886Speter */
503251886Speter#define APR_DECLARE_NONSTD(type)     type
504251886Speter
505251886Speter/**
506251886Speter * The public APR variables are declared with AP_MODULE_DECLARE_DATA.
507251886Speter * This assures the appropriate indirection is invoked at compile time.
508251886Speter * @see APR_DECLARE @see APR_DECLARE_NONSTD
509251886Speter * @remark Note that the declaration and implementations use different forms,
510251886Speter * but both must include the macro.
511251886Speter *
512251886Speter * <PRE>
513251886Speter *
514251886Speter * extern APR_DECLARE_DATA type apr_variable;\n
515251886Speter * APR_DECLARE_DATA type apr_variable = value;
516251886Speter *
517251886Speter * </PRE>
518251886Speter */
519251886Speter#define APR_DECLARE_DATA
520251886Speter
521251886Speter/* Define APR_SSIZE_T_FMT.
522251886Speter * If ssize_t is an integer we define it to be "d",
523251886Speter * if ssize_t is a long int we define it to be "ld",
524251886Speter * if ssize_t is neither we declare an error here.
525251886Speter * I looked for a better way to define this here, but couldn't find one, so
526251886Speter * to find the logic for this definition search for "ssize_t_fmt" in
527251886Speter * configure.in.
528251886Speter */
529251886Speter
530251953Speter#ifdef __LP64__
531251886Speter#define APR_SSIZE_T_FMT "ld"
532251886Speter
533251886Speter/* And APR_SIZE_T_FMT */
534251886Speter#define APR_SIZE_T_FMT "lu"
535251886Speter
536251886Speter/* And APR_OFF_T_FMT */
537251886Speter#define APR_OFF_T_FMT "ld"
538251886Speter
539251886Speter/* And APR_PID_T_FMT */
540251886Speter#define APR_PID_T_FMT "d"
541251886Speter
542251886Speter/* And APR_INT64_T_FMT */
543251886Speter#define APR_INT64_T_FMT "ld"
544251886Speter
545251886Speter/* And APR_UINT64_T_FMT */
546251886Speter#define APR_UINT64_T_FMT "lu"
547251886Speter
548251886Speter/* And APR_UINT64_T_HEX_FMT */
549251886Speter#define APR_UINT64_T_HEX_FMT "lx"
550251953Speter#else
551251953Speter#define APR_SSIZE_T_FMT "d"
552251953Speter#define APR_SIZE_T_FMT "u"
553251953Speter#define APR_OFF_T_FMT APR_INT64_T_FMT
554251953Speter#define APR_PID_T_FMT "d"
555251953Speter#define APR_INT64_T_FMT "lld"
556251953Speter#define APR_UINT64_T_FMT "llu"
557251953Speter#define APR_UINT64_T_HEX_FMT "llx"
558251953Speter#endif
559251886Speter
560251886Speter/*
561251886Speter * Ensure we work with universal binaries on Darwin
562251886Speter */
563251886Speter#ifdef DARWIN_10
564251886Speter
565251886Speter#undef APR_HAS_LARGE_FILES
566251886Speter#undef APR_SIZEOF_VOIDP
567251886Speter#undef APR_INT64_T_FMT
568251886Speter#undef APR_UINT64_T_FMT
569251886Speter#undef APR_UINT64_T_HEX_FMT
570251886Speter
571251886Speter#ifdef __LP64__
572251886Speter #define APR_HAS_LARGE_FILES  0
573251886Speter #define APR_SIZEOF_VOIDP     8
574251886Speter #define APR_INT64_T_FMT      "ld"
575251886Speter #define APR_UINT64_T_FMT     "lu"
576251886Speter #define APR_UINT64_T_HEX_FMT "lx"
577251886Speter#else
578251886Speter #define APR_HAS_LARGE_FILES  1
579251886Speter #define APR_SIZEOF_VOIDP     4
580251886Speter #define APR_INT64_T_FMT      "lld"
581251886Speter #define APR_UINT64_T_FMT     "llu"
582251886Speter #define APR_UINT64_T_HEX_FMT "llx"
583251886Speter#endif
584251886Speter
585251886Speter#undef APR_IS_BIGENDIAN
586251886Speter#ifdef __BIG_ENDIAN__
587251886Speter #define APR_IS_BIGENDIAN	1
588251886Speter#else
589251886Speter #define APR_IS_BIGENDIAN	0
590251886Speter#endif
591251886Speter
592251886Speter#undef APR_OFF_T_FMT
593251886Speter#define APR_OFF_T_FMT "lld"
594251886Speter
595251886Speter#endif /* DARWIN_10 */
596251886Speter
597251886Speter/* Does the proc mutex lock threads too */
598251886Speter#define APR_PROC_MUTEX_IS_GLOBAL      0
599251886Speter
600251886Speter/* Local machine definition for console and log output. */
601251886Speter#define APR_EOL_STR              "\n"
602251886Speter
603251886Speter#if APR_HAVE_SYS_WAIT_H
604251886Speter#ifdef WEXITSTATUS
605251886Speter#define apr_wait_t       int
606251886Speter#else
607251886Speter#define apr_wait_t       union wait
608251886Speter#define WEXITSTATUS(status)    (int)((status).w_retcode)
609251886Speter#define WTERMSIG(status)       (int)((status).w_termsig)
610251886Speter#endif /* !WEXITSTATUS */
611251886Speter#elif defined(__MINGW32__)
612251886Spetertypedef int apr_wait_t;
613251886Speter#endif /* HAVE_SYS_WAIT_H */
614251886Speter
615251886Speter#if defined(PATH_MAX)
616251886Speter#define APR_PATH_MAX       PATH_MAX
617251886Speter#elif defined(_POSIX_PATH_MAX)
618251886Speter#define APR_PATH_MAX       _POSIX_PATH_MAX
619251886Speter#else
620251886Speter#error no decision has been made on APR_PATH_MAX for your platform
621251886Speter#endif
622251886Speter
623251886Speter#define APR_DSOPATH "LD_LIBRARY_PATH"
624251886Speter
625251886Speter/** @} */
626251886Speter
627251886Speter/* Definitions that only Win32 programs need to compile properly. */
628251886Speter
629251886Speter/* XXX These simply don't belong here, perhaps in apr_portable.h
630251886Speter * based on some APR_HAVE_PID/GID/UID?
631251886Speter */
632251886Speter#ifdef __MINGW32__
633251886Speter#ifndef __GNUC__
634251886Spetertypedef  int         pid_t;
635251886Speter#endif
636251886Spetertypedef  int         uid_t;
637251886Spetertypedef  int         gid_t;
638251886Speter#endif
639251886Speter
640251886Speter#ifdef __cplusplus
641251886Speter}
642251886Speter#endif
643251886Speter
644251886Speter#endif /* APR_H */
645