1251886Speter/* $FreeBSD: stable/11/usr.bin/svn/lib/libapr/apr.h 362181 2020-06-14 18:49:06Z dim $ */
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
98362181Sdim#define APR_HAVE_INTTYPES_H      1
99251886Speter#define APR_HAVE_SYS_IOCTL_H     1
100251886Speter#define APR_HAVE_SYS_SENDFILE_H  0
101251886Speter#define APR_HAVE_SYS_SIGNAL_H    1
102251886Speter#define APR_HAVE_SYS_SOCKET_H    1
103251886Speter#define APR_HAVE_SYS_SOCKIO_H    1
104251886Speter#define APR_HAVE_SYS_SYSLIMITS_H 1
105251886Speter#define APR_HAVE_SYS_TIME_H      1
106251886Speter#define APR_HAVE_SYS_TYPES_H     1
107251886Speter#define APR_HAVE_SYS_UIO_H       1
108251886Speter#define APR_HAVE_SYS_UN_H        1
109251886Speter#define APR_HAVE_SYS_WAIT_H      1
110251886Speter#define APR_HAVE_TIME_H          1
111251886Speter#define APR_HAVE_UNISTD_H        1
112251886Speter#define APR_HAVE_WINDOWS_H       0
113251886Speter#define APR_HAVE_WINSOCK2_H      0
114251886Speter
115251886Speter/** @} */
116251886Speter/** @} */
117251886Speter
118251886Speter/* We don't include our conditional headers within the doxyblocks
119251886Speter * or the extern "C" namespace
120251886Speter */
121251886Speter
122266736Speter#if APR_HAVE_WINDOWS_H && defined(WIN32)
123251886Speter/* If windows.h was already included, our preferences don't matter.
124251886Speter * If not, include a restricted set of windows headers to our tastes.
125251886Speter */
126251886Speter#ifndef _WINDOWS_
127251886Speter
128251886Speter#ifndef WIN32_LEAN_AND_MEAN
129251886Speter#define WIN32_LEAN_AND_MEAN
130251886Speter#endif
131251886Speter
132251886Speter#ifndef _WIN32_WINNT
133251886Speter/* Restrict the server to a subset of Windows XP header files by default
134251886Speter */
135251886Speter#define _WIN32_WINNT 0x0501
136251886Speter#endif
137251886Speter
138251886Speter#ifndef NOUSER
139251886Speter#define NOUSER
140251886Speter#endif
141251886Speter#ifndef NOMCX
142251886Speter#define NOMCX
143251886Speter#endif
144251886Speter#ifndef NOIME
145251886Speter#define NOIME
146251886Speter#endif
147251886Speter
148251886Speter#include <windows.h>
149251886Speter/*
150251886Speter * Add a _very_few_ declarations missing from the restricted set of headers
151251886Speter * (If this list becomes extensive, re-enable the required headers above!)
152251886Speter * winsock headers were excluded by WIN32_LEAN_AND_MEAN, so include them now
153251886Speter */
154251886Speter#define SW_HIDE             0
155251886Speter#ifndef _WIN32_WCE
156251886Speter#include <winsock2.h>
157251886Speter#include <ws2tcpip.h>
158251886Speter#include <mswsock.h>
159251886Speter#else
160251886Speter#include <winsock.h>
161251886Speter#endif
162251886Speter
163251886Speter#endif /* ndef _WINDOWS_ */
164251886Speter#endif /* APR_HAVE_WINDOWS_H */
165251886Speter
166251886Speter#if APR_HAVE_SYS_TYPES_H
167251886Speter#include <sys/types.h>
168251886Speter#endif
169251886Speter
170251886Speter#if APR_HAVE_SYS_SOCKET_H
171251886Speter#include <sys/socket.h>
172251886Speter#endif
173251886Speter
174362181Sdim#if APR_HAVE_STDINT_H
175362181Sdim#ifdef __cplusplus
176251886Speter/* C99 7.18.4 requires that stdint.h only exposes INT64_C
177251886Speter * and UINT64_C for C++ implementations if this is defined: */
178362181Sdim#ifndef __STDC_CONSTANT_MACROS
179251886Speter#define __STDC_CONSTANT_MACROS
180251886Speter#endif
181362181Sdim/* C++ needs this too for PRI*NN formats: */
182362181Sdim#ifndef __STDC_FORMAT_MACROS
183362181Sdim#define __STDC_FORMAT_MACROS
184362181Sdim#endif
185362181Sdim#endif /* __cplusplus */
186251886Speter#include <stdint.h>
187251886Speter#endif
188251886Speter
189362181Sdim#if APR_HAVE_INTTYPES_H
190362181Sdim#include <inttypes.h>
191362181Sdim#endif
192362181Sdim
193251886Speter#if APR_HAVE_SYS_WAIT_H
194251886Speter#include <sys/wait.h>
195251886Speter#endif
196251886Speter
197251886Speter#ifdef OS2
198251886Speter#define INCL_DOS
199251886Speter#define INCL_DOSERRORS
200251886Speter#include <os2.h>
201251886Speter#endif
202251886Speter
203251886Speter/* header files for PATH_MAX, _POSIX_PATH_MAX */
204251886Speter#if APR_HAVE_LIMITS_H
205251886Speter#include <limits.h>
206251886Speter#else
207251886Speter#if APR_HAVE_SYS_SYSLIMITS_H
208251886Speter#include <sys/syslimits.h>
209251886Speter#endif
210251886Speter#endif
211251886Speter
212362181Sdim/* __APPLE__ is now the official pre-defined macro for macOS */
213362181Sdim#ifdef __APPLE__
214362181Sdim#undef DARWIN
215362181Sdim#undef DARWIN_10
216362181Sdim#define DARWIN
217362181Sdim#define DARWIN_10
218362181Sdim#endif /* __APPLE__ */
219251886Speter
220251886Speter#ifdef __cplusplus
221251886Speterextern "C" {
222251886Speter#endif
223251886Speter
224251886Speter/**
225251886Speter * @addtogroup apr_platform
226251886Speter * @ingroup APR
227251886Speter * @{
228251886Speter */
229251886Speter
230251886Speter#define APR_HAVE_SHMEM_MMAP_TMP     1
231251886Speter#define APR_HAVE_SHMEM_MMAP_SHM     1
232251886Speter#define APR_HAVE_SHMEM_MMAP_ZERO    1
233251886Speter#define APR_HAVE_SHMEM_SHMGET_ANON  1
234251886Speter#define APR_HAVE_SHMEM_SHMGET       1
235251886Speter#define APR_HAVE_SHMEM_MMAP_ANON    1
236251886Speter#define APR_HAVE_SHMEM_BEOS         0
237251886Speter
238251886Speter#define APR_USE_SHMEM_MMAP_TMP     0
239362181Sdim#define APR_USE_SHMEM_MMAP_SHM     0
240251886Speter#define APR_USE_SHMEM_MMAP_ZERO    0
241251886Speter#define APR_USE_SHMEM_SHMGET_ANON  0
242362181Sdim#define APR_USE_SHMEM_SHMGET       1
243251886Speter#define APR_USE_SHMEM_MMAP_ANON    1
244251886Speter#define APR_USE_SHMEM_BEOS         0
245251886Speter
246251886Speter#define APR_USE_FLOCK_SERIALIZE           1
247251886Speter#define APR_USE_SYSVSEM_SERIALIZE         0
248251886Speter#define APR_USE_POSIXSEM_SERIALIZE        0
249251886Speter#define APR_USE_FCNTL_SERIALIZE           0
250251886Speter#define APR_USE_PROC_PTHREAD_SERIALIZE    0
251251886Speter#define APR_USE_PTHREAD_SERIALIZE         1
252251886Speter
253251886Speter#define APR_HAS_FLOCK_SERIALIZE           1
254251886Speter#define APR_HAS_SYSVSEM_SERIALIZE         1
255251886Speter#define APR_HAS_POSIXSEM_SERIALIZE        1
256251886Speter#define APR_HAS_FCNTL_SERIALIZE           1
257362181Sdim#define APR_HAS_PROC_PTHREAD_SERIALIZE    1
258251886Speter
259251886Speter#define APR_PROCESS_LOCK_IS_GLOBAL        0
260251886Speter
261251886Speter#define APR_HAVE_CORKABLE_TCP   1
262251886Speter#define APR_HAVE_GETRLIMIT      1
263251886Speter#define APR_HAVE_IN_ADDR        1
264251886Speter#define APR_HAVE_INET_ADDR      1
265251886Speter#define APR_HAVE_INET_NETWORK   1
266251886Speter#define APR_HAVE_IPV6           1
267362181Sdim#define APR_HAVE_SOCKADDR_UN    1
268251886Speter#define APR_HAVE_MEMMOVE        1
269251886Speter#define APR_HAVE_SETRLIMIT      1
270251886Speter#define APR_HAVE_SIGACTION      1
271251886Speter#define APR_HAVE_SIGSUSPEND     1
272251886Speter#define APR_HAVE_SIGWAIT        1
273251886Speter#define APR_HAVE_SA_STORAGE     1
274251886Speter#define APR_HAVE_STRCASECMP     1
275251886Speter#define APR_HAVE_STRDUP         1
276251886Speter#define APR_HAVE_STRICMP        0
277251886Speter#define APR_HAVE_STRNCASECMP    1
278251886Speter#define APR_HAVE_STRNICMP       0
279251886Speter#define APR_HAVE_STRSTR         1
280251886Speter#define APR_HAVE_MEMCHR         1
281251886Speter#define APR_HAVE_STRUCT_RLIMIT  1
282251886Speter#define APR_HAVE_UNION_SEMUN    1
283251886Speter#define APR_HAVE_SCTP           1
284251886Speter#define APR_HAVE_IOVEC          1
285251886Speter
286251886Speter/*  APR Feature Macros */
287251886Speter#define APR_HAS_SHARED_MEMORY     1
288251886Speter#define APR_HAS_THREADS           1
289251886Speter#define APR_HAS_SENDFILE          1
290251886Speter#define APR_HAS_MMAP              1
291251886Speter#define APR_HAS_FORK              1
292251886Speter#define APR_HAS_RANDOM            1
293251886Speter#define APR_HAS_OTHER_CHILD       1
294362181Sdim#define APR_HAS_DSO               1
295251886Speter#define APR_HAS_SO_ACCEPTFILTER   1
296251886Speter#define APR_HAS_UNICODE_FS        0
297251886Speter#define APR_HAS_PROC_INVOKED      0
298251886Speter#define APR_HAS_USER              1
299251886Speter#define APR_HAS_LARGE_FILES       0
300251886Speter#define APR_HAS_XTHREAD_FILES     0
301251886Speter#define APR_HAS_OS_UUID           1
302362181Sdim#define APR_HAS_TIMEDLOCKS        1
303251886Speter
304251886Speter#define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD 0
305251886Speter
306251886Speter/* APR sets APR_FILES_AS_SOCKETS to 1 on systems where it is possible
307251886Speter * to poll on files/pipes.
308251886Speter */
309251886Speter#define APR_FILES_AS_SOCKETS      1
310251886Speter
311251886Speter/* This macro indicates whether or not EBCDIC is the native character set.
312251886Speter */
313251886Speter#define APR_CHARSET_EBCDIC        0
314251886Speter
315251886Speter/* If we have a TCP implementation that can be "corked", what flag
316251886Speter * do we use?
317251886Speter */
318251886Speter#define APR_TCP_NOPUSH_FLAG       TCP_NOPUSH
319251886Speter
320251886Speter/* Is the TCP_NODELAY socket option inherited from listening sockets?
321251886Speter*/
322251886Speter#define APR_TCP_NODELAY_INHERITED 1
323251886Speter
324251886Speter/* Is the O_NONBLOCK flag inherited from listening sockets?
325251886Speter*/
326251886Speter#define APR_O_NONBLOCK_INHERITED 1
327251886Speter
328251886Speter/* Typedefs that APR needs. */
329251886Speter
330251886Spetertypedef  unsigned char           apr_byte_t;
331251886Speter
332251886Spetertypedef  short           apr_int16_t;
333251886Spetertypedef  unsigned short  apr_uint16_t;
334251886Speter
335251886Spetertypedef  int             apr_int32_t;
336251886Spetertypedef  unsigned int    apr_uint32_t;
337251886Speter
338251953Speter#include <sys/_types.h>
339251953Speter#ifdef __LP64__
340251886Speter#define APR_SIZEOF_VOIDP 8
341251953Speter#else
342251953Speter#define APR_SIZEOF_VOIDP 4
343251953Speter#endif
344251886Speter
345251886Speter/*
346251886Speter * Darwin 10's default compiler (gcc42) builds for both 64 and
347251886Speter * 32 bit architectures unless specifically told not to.
348251886Speter * In those cases, we need to override types depending on how
349251886Speter * we're being built at compile time.
350251886Speter * NOTE: This is an ugly work-around for Darwin's
351251886Speter * concept of universal binaries, a single package
352251886Speter * (executable, lib, etc...) which contains both 32
353251886Speter * and 64 bit versions. The issue is that if APR is
354251886Speter * built universally, if something else is compiled
355251886Speter * against it, some bit sizes will depend on whether
356251886Speter * it is 32 or 64 bit. This is determined by the __LP64__
357251886Speter * flag. Since we need to support both, we have to
358251886Speter * handle OS X unqiuely.
359251886Speter */
360251886Speter#ifdef DARWIN_10
361251886Speter#undef APR_SIZEOF_VOIDP
362362181Sdim#undef APR_INT64_C
363362181Sdim#undef APR_UINT64_C
364251886Speter#ifdef __LP64__
365251886Speter typedef  long            apr_int64_t;
366251886Speter typedef  unsigned long   apr_uint64_t;
367251886Speter #define APR_SIZEOF_VOIDP     8
368362181Sdim #define APR_INT64_C(v)   (v ## L)
369362181Sdim #define APR_UINT64_C(v)  (v ## UL)
370251886Speter#else
371251886Speter typedef  long long            apr_int64_t;
372251886Speter typedef  unsigned long long   apr_uint64_t;
373251886Speter #define APR_SIZEOF_VOIDP     4
374362181Sdim #define APR_INT64_C(v)   (v ## LL)
375362181Sdim #define APR_UINT64_C(v)  (v ## ULL)
376251886Speter#endif
377251886Speter#else
378251953Speter typedef  __int64_t            apr_int64_t;
379251953Speter typedef  __uint64_t           apr_uint64_t;
380362181Sdim
381362181Sdim /* Mechanisms to properly type numeric literals */
382362181Sdim #define APR_INT64_C(val) INT64_C(val)
383362181Sdim #define APR_UINT64_C(val) UINT64_C(val)
384251886Speter#endif
385251886Speter
386251886Spetertypedef  size_t          apr_size_t;
387251886Spetertypedef  ssize_t         apr_ssize_t;
388251886Spetertypedef  off_t           apr_off_t;
389251886Spetertypedef  socklen_t       apr_socklen_t;
390362181Sdimtypedef  __ino_t         apr_ino_t;
391251886Speter
392251886Speter#if APR_SIZEOF_VOIDP == 8
393251886Spetertypedef  apr_uint64_t            apr_uintptr_t;
394251886Speter#else
395251886Spetertypedef  apr_uint32_t            apr_uintptr_t;
396251886Speter#endif
397251886Speter
398251886Speter/* Are we big endian? */
399255696Sdim#if _BYTE_ORDER == _LITTLE_ENDIAN
400251886Speter#define APR_IS_BIGENDIAN	0
401255696Sdim#elif _BYTE_ORDER == _BIG_ENDIAN
402255696Sdim#define APR_IS_BIGENDIAN	1
403255696Sdim#else
404255696Sdim#error Unknown byte order.
405255696Sdim#endif
406251886Speter
407251886Speter#ifdef INT16_MIN
408251886Speter#define APR_INT16_MIN   INT16_MIN
409251886Speter#else
410251886Speter#define APR_INT16_MIN   (-0x7fff - 1)
411251886Speter#endif
412251886Speter
413251886Speter#ifdef INT16_MAX
414251886Speter#define APR_INT16_MAX  INT16_MAX
415251886Speter#else
416251886Speter#define APR_INT16_MAX   (0x7fff)
417251886Speter#endif
418251886Speter
419251886Speter#ifdef UINT16_MAX
420251886Speter#define APR_UINT16_MAX  UINT16_MAX
421251886Speter#else
422251886Speter#define APR_UINT16_MAX  (0xffff)
423251886Speter#endif
424251886Speter
425251886Speter#ifdef INT32_MIN
426251886Speter#define APR_INT32_MIN   INT32_MIN
427251886Speter#else
428251886Speter#define APR_INT32_MIN   (-0x7fffffff - 1)
429251886Speter#endif
430251886Speter
431251886Speter#ifdef INT32_MAX
432251886Speter#define APR_INT32_MAX  INT32_MAX
433251886Speter#else
434251886Speter#define APR_INT32_MAX  0x7fffffff
435251886Speter#endif
436251886Speter
437251886Speter#ifdef UINT32_MAX
438251886Speter#define APR_UINT32_MAX  UINT32_MAX
439251886Speter#else
440251886Speter#define APR_UINT32_MAX  (0xffffffffU)
441251886Speter#endif
442251886Speter
443251886Speter#ifdef INT64_MIN
444251886Speter#define APR_INT64_MIN   INT64_MIN
445251886Speter#else
446251886Speter#define APR_INT64_MIN   (APR_INT64_C(-0x7fffffffffffffff) - 1)
447251886Speter#endif
448251886Speter
449251886Speter#ifdef INT64_MAX
450251886Speter#define APR_INT64_MAX   INT64_MAX
451251886Speter#else
452251886Speter#define APR_INT64_MAX   APR_INT64_C(0x7fffffffffffffff)
453251886Speter#endif
454251886Speter
455251886Speter#ifdef UINT64_MAX
456251886Speter#define APR_UINT64_MAX  UINT64_MAX
457251886Speter#else
458251886Speter#define APR_UINT64_MAX  APR_UINT64_C(0xffffffffffffffff)
459251886Speter#endif
460251886Speter
461251886Speter#define APR_SIZE_MAX    (~((apr_size_t)0))
462251886Speter
463251886Speter
464251886Speter/* Definitions that APR programs need to work properly. */
465251886Speter
466251886Speter/**
467251886Speter * APR public API wrap for C++ compilers.
468251886Speter */
469251886Speter#ifdef __cplusplus
470251886Speter#define APR_BEGIN_DECLS     extern "C" {
471251886Speter#define APR_END_DECLS       }
472251886Speter#else
473251886Speter#define APR_BEGIN_DECLS
474251886Speter#define APR_END_DECLS
475251886Speter#endif
476251886Speter
477251886Speter/**
478251886Speter * Thread callbacks from APR functions must be declared with APR_THREAD_FUNC,
479251886Speter * so that they follow the platform's calling convention.
480251886Speter * <PRE>
481251886Speter *
482251886Speter * void* APR_THREAD_FUNC my_thread_entry_fn(apr_thread_t *thd, void *data);
483251886Speter *
484251886Speter * </PRE>
485251886Speter */
486251886Speter#define APR_THREAD_FUNC
487251886Speter
488266736Speter#if defined(DOXYGEN) || !defined(WIN32)
489266736Speter
490251886Speter/**
491251886Speter * The public APR functions are declared with APR_DECLARE(), so they may
492251886Speter * use the most appropriate calling convention.  Public APR functions with
493251886Speter * variable arguments must use APR_DECLARE_NONSTD().
494251886Speter *
495251886Speter * @remark Both the declaration and implementations must use the same macro.
496251886Speter *
497251886Speter * <PRE>
498251886Speter * APR_DECLARE(rettype) apr_func(args)
499251886Speter * </PRE>
500251886Speter * @see APR_DECLARE_NONSTD @see APR_DECLARE_DATA
501251886Speter * @remark Note that when APR compiles the library itself, it passes the
502251886Speter * symbol -DAPR_DECLARE_EXPORT to the compiler on some platforms (e.g. Win32)
503251886Speter * to export public symbols from the dynamic library build.\n
504251886Speter * The user must define the APR_DECLARE_STATIC when compiling to target
505251886Speter * the static APR library on some platforms (e.g. Win32.)  The public symbols
506251886Speter * are neither exported nor imported when APR_DECLARE_STATIC is defined.\n
507251886Speter * By default, compiling an application and including the APR public
508251886Speter * headers, without defining APR_DECLARE_STATIC, will prepare the code to be
509251886Speter * linked to the dynamic library.
510251886Speter */
511251886Speter#define APR_DECLARE(type)            type
512251886Speter
513251886Speter/**
514251886Speter * The public APR functions using variable arguments are declared with
515251886Speter * APR_DECLARE_NONSTD(), as they must follow the C language calling convention.
516251886Speter * @see APR_DECLARE @see APR_DECLARE_DATA
517251886Speter * @remark Both the declaration and implementations must use the same macro.
518251886Speter * <PRE>
519251886Speter *
520251886Speter * APR_DECLARE_NONSTD(rettype) apr_func(args, ...);
521251886Speter *
522251886Speter * </PRE>
523251886Speter */
524251886Speter#define APR_DECLARE_NONSTD(type)     type
525251886Speter
526251886Speter/**
527251886Speter * The public APR variables are declared with AP_MODULE_DECLARE_DATA.
528251886Speter * This assures the appropriate indirection is invoked at compile time.
529251886Speter * @see APR_DECLARE @see APR_DECLARE_NONSTD
530251886Speter * @remark Note that the declaration and implementations use different forms,
531251886Speter * but both must include the macro.
532251886Speter *
533251886Speter * <PRE>
534251886Speter *
535251886Speter * extern APR_DECLARE_DATA type apr_variable;\n
536251886Speter * APR_DECLARE_DATA type apr_variable = value;
537251886Speter *
538251886Speter * </PRE>
539251886Speter */
540251886Speter#define APR_DECLARE_DATA
541251886Speter
542266736Speter#elif defined(APR_DECLARE_STATIC)
543266736Speter#define APR_DECLARE(type)            type __stdcall
544266736Speter#define APR_DECLARE_NONSTD(type)     type __cdecl
545266736Speter#define APR_DECLARE_DATA
546266736Speter#elif defined(APR_DECLARE_EXPORT)
547266736Speter#define APR_DECLARE(type)            __declspec(dllexport) type __stdcall
548266736Speter#define APR_DECLARE_NONSTD(type)     __declspec(dllexport) type __cdecl
549266736Speter#define APR_DECLARE_DATA             __declspec(dllexport)
550266736Speter#else
551266736Speter#define APR_DECLARE(type)            __declspec(dllimport) type __stdcall
552266736Speter#define APR_DECLARE_NONSTD(type)     __declspec(dllimport) type __cdecl
553266736Speter#define APR_DECLARE_DATA             __declspec(dllimport)
554266736Speter#endif
555266736Speter
556251886Speter/* Define APR_SSIZE_T_FMT.
557251886Speter * If ssize_t is an integer we define it to be "d",
558251886Speter * if ssize_t is a long int we define it to be "ld",
559251886Speter * if ssize_t is neither we declare an error here.
560251886Speter * I looked for a better way to define this here, but couldn't find one, so
561251886Speter * to find the logic for this definition search for "ssize_t_fmt" in
562251886Speter * configure.in.
563251886Speter */
564251886Speter
565251953Speter#ifdef __LP64__
566251886Speter#define APR_SSIZE_T_FMT "ld"
567251886Speter
568251886Speter/* And APR_SIZE_T_FMT */
569251886Speter#define APR_SIZE_T_FMT "lu"
570251886Speter
571251886Speter/* And APR_OFF_T_FMT */
572251886Speter#define APR_OFF_T_FMT "ld"
573251886Speter
574251886Speter/* And APR_PID_T_FMT */
575251886Speter#define APR_PID_T_FMT "d"
576251886Speter
577251886Speter/* And APR_INT64_T_FMT */
578251886Speter#define APR_INT64_T_FMT "ld"
579251886Speter
580251886Speter/* And APR_UINT64_T_FMT */
581251886Speter#define APR_UINT64_T_FMT "lu"
582251886Speter
583251886Speter/* And APR_UINT64_T_HEX_FMT */
584251886Speter#define APR_UINT64_T_HEX_FMT "lx"
585251953Speter#else
586251953Speter#define APR_SSIZE_T_FMT "d"
587251953Speter#define APR_SIZE_T_FMT "u"
588251953Speter#define APR_OFF_T_FMT APR_INT64_T_FMT
589251953Speter#define APR_PID_T_FMT "d"
590251953Speter#define APR_INT64_T_FMT "lld"
591251953Speter#define APR_UINT64_T_FMT "llu"
592251953Speter#define APR_UINT64_T_HEX_FMT "llx"
593251953Speter#endif
594251886Speter
595251886Speter/*
596251886Speter * Ensure we work with universal binaries on Darwin
597251886Speter */
598251886Speter#ifdef DARWIN_10
599251886Speter
600251886Speter#undef APR_HAS_LARGE_FILES
601251886Speter#undef APR_SIZEOF_VOIDP
602251886Speter#undef APR_INT64_T_FMT
603251886Speter#undef APR_UINT64_T_FMT
604251886Speter#undef APR_UINT64_T_HEX_FMT
605251886Speter
606251886Speter#ifdef __LP64__
607251886Speter #define APR_HAS_LARGE_FILES  0
608251886Speter #define APR_SIZEOF_VOIDP     8
609251886Speter #define APR_INT64_T_FMT      "ld"
610251886Speter #define APR_UINT64_T_FMT     "lu"
611251886Speter #define APR_UINT64_T_HEX_FMT "lx"
612251886Speter#else
613251886Speter #define APR_HAS_LARGE_FILES  1
614251886Speter #define APR_SIZEOF_VOIDP     4
615251886Speter #define APR_INT64_T_FMT      "lld"
616251886Speter #define APR_UINT64_T_FMT     "llu"
617251886Speter #define APR_UINT64_T_HEX_FMT "llx"
618251886Speter#endif
619251886Speter
620251886Speter#undef APR_IS_BIGENDIAN
621251886Speter#ifdef __BIG_ENDIAN__
622251886Speter #define APR_IS_BIGENDIAN	1
623251886Speter#else
624251886Speter #define APR_IS_BIGENDIAN	0
625251886Speter#endif
626251886Speter
627251886Speter#undef APR_OFF_T_FMT
628251886Speter#define APR_OFF_T_FMT "lld"
629251886Speter
630251886Speter#endif /* DARWIN_10 */
631251886Speter
632251886Speter/* Does the proc mutex lock threads too */
633251886Speter#define APR_PROC_MUTEX_IS_GLOBAL      0
634251886Speter
635251886Speter/* Local machine definition for console and log output. */
636251886Speter#define APR_EOL_STR              "\n"
637251886Speter
638251886Speter#if APR_HAVE_SYS_WAIT_H
639251886Speter#ifdef WEXITSTATUS
640251886Speter#define apr_wait_t       int
641251886Speter#else
642251886Speter#define apr_wait_t       union wait
643251886Speter#define WEXITSTATUS(status)    (int)((status).w_retcode)
644251886Speter#define WTERMSIG(status)       (int)((status).w_termsig)
645251886Speter#endif /* !WEXITSTATUS */
646251886Speter#elif defined(__MINGW32__)
647251886Spetertypedef int apr_wait_t;
648251886Speter#endif /* HAVE_SYS_WAIT_H */
649251886Speter
650251886Speter#if defined(PATH_MAX)
651251886Speter#define APR_PATH_MAX       PATH_MAX
652251886Speter#elif defined(_POSIX_PATH_MAX)
653251886Speter#define APR_PATH_MAX       _POSIX_PATH_MAX
654251886Speter#else
655251886Speter#error no decision has been made on APR_PATH_MAX for your platform
656251886Speter#endif
657251886Speter
658251886Speter#define APR_DSOPATH "LD_LIBRARY_PATH"
659251886Speter
660251886Speter/** @} */
661251886Speter
662251886Speter/* Definitions that only Win32 programs need to compile properly. */
663251886Speter
664251886Speter/* XXX These simply don't belong here, perhaps in apr_portable.h
665251886Speter * based on some APR_HAVE_PID/GID/UID?
666251886Speter */
667251886Speter#ifdef __MINGW32__
668251886Speter#ifndef __GNUC__
669251886Spetertypedef  int         pid_t;
670251886Speter#endif
671251886Spetertypedef  int         uid_t;
672251886Spetertypedef  int         gid_t;
673251886Speter#endif
674251886Speter
675251886Speter#ifdef __cplusplus
676251886Speter}
677251886Speter#endif
678251886Speter
679251886Speter#endif /* APR_H */
680