1 /* Licensed to the Apache Software Foundation (ASF) under one or more 2 * contributor license agreements. See the NOTICE file distributed with 3 * this work for additional information regarding copyright ownership. 4 * The ASF licenses this file to You under the Apache License, Version 2.0 5 * (the "License"); you may not use this file except in compliance with 6 * the License. You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 18 #ifndef APR_H 19 #define APR_H 20 21 /* GENERATED FILE WARNING! DO NOT EDIT apr.h 22 * 23 * You must modify apr.h.in instead. 24 * 25 * And please, make an effort to stub apr.hw and apr.hnw in the process. 26 */ 27 28 /** 29 * @file apr.h 30 * @brief APR Platform Definitions 31 * @remark This is a generated header generated from include/apr.h.in by 32 * ./configure, or copied from include/apr.hw or include/apr.hnw 33 * for Win32 or Netware by those build environments, respectively. 34 */ 35 36 /** 37 * @defgroup APR Apache Portability Runtime library 38 * @{ 39 */ 40 /** 41 * @defgroup apr_platform Platform Definitions 42 * @{ 43 * @warning 44 * <strong><em>The actual values of macros and typedefs on this page<br> 45 * are platform specific and should NOT be relied upon!</em></strong> 46 */ 47 48 /* So that we can use inline on some critical functions, and use 49 * GNUC attributes (such as to get -Wall warnings for printf-like 50 * functions). Only do this in gcc 2.7 or later ... it may work 51 * on earlier stuff, but why chance it. 52 * 53 * We've since discovered that the gcc shipped with NeXT systems 54 * as "cc" is completely broken. It claims to be __GNUC__ and so 55 * on, but it doesn't implement half of the things that __GNUC__ 56 * means. In particular it's missing inline and the __attribute__ 57 * stuff. So we hack around it. PR#1613. -djg 58 */ 59 #if !defined(__GNUC__) || __GNUC__ < 2 || \ 60 (__GNUC__ == 2 && __GNUC_MINOR__ < 7) ||\ 61 defined(NEXT) 62 #ifndef __attribute__ 63 #define __attribute__(__x) 64 #endif 65 #define APR_INLINE 66 #define APR_HAS_INLINE 0 67 #else 68 #define APR_INLINE __inline__ 69 #define APR_HAS_INLINE 1 70 #endif 71 72 #define APR_HAVE_ARPA_INET_H 1 73 #define APR_HAVE_CONIO_H 0 74 #define APR_HAVE_CRYPT_H 1 75 #define APR_HAVE_CTYPE_H 1 76 #define APR_HAVE_DIRENT_H 1 77 #define APR_HAVE_ERRNO_H 1 78 #define APR_HAVE_FCNTL_H 1 79 #define APR_HAVE_IO_H 0 80 #define APR_HAVE_LIMITS_H 1 81 #define APR_HAVE_NETDB_H 1 82 #define APR_HAVE_NETINET_IN_H 1 83 #define APR_HAVE_NETINET_SCTP_H 0 84 #define APR_HAVE_NETINET_SCTP_UIO_H 0 85 #define APR_HAVE_NETINET_TCP_H 1 86 #define APR_HAVE_PROCESS_H 0 87 #define APR_HAVE_PTHREAD_H 1 88 #define APR_HAVE_SEMAPHORE_H 1 89 #define APR_HAVE_SIGNAL_H 1 90 #define APR_HAVE_STDARG_H 1 91 #define APR_HAVE_STDINT_H 1 92 #define APR_HAVE_STDIO_H 1 93 #define APR_HAVE_STDLIB_H 1 94 #define APR_HAVE_STRING_H 1 95 #define APR_HAVE_STRINGS_H 1 96 #define APR_HAVE_SYS_IOCTL_H 1 97 #define APR_HAVE_SYS_SENDFILE_H 1 98 #define APR_HAVE_SYS_SIGNAL_H 1 99 #define APR_HAVE_SYS_SOCKET_H 1 100 #define APR_HAVE_SYS_SOCKIO_H 0 101 #define APR_HAVE_SYS_SYSLIMITS_H 0 102 #define APR_HAVE_SYS_TIME_H 1 103 #define APR_HAVE_SYS_TYPES_H 1 104 #define APR_HAVE_SYS_UIO_H 1 105 #define APR_HAVE_SYS_UN_H 1 106 #define APR_HAVE_SYS_WAIT_H 1 107 #define APR_HAVE_TIME_H 1 108 #define APR_HAVE_UNISTD_H 1 109 #define APR_HAVE_WINDOWS_H 0 110 #define APR_HAVE_WINSOCK2_H 0 111 112 /** @} */ 113 /** @} */ 114 115 /* We don't include our conditional headers within the doxyblocks 116 * or the extern "C" namespace 117 */ 118 119 #if APR_HAVE_WINDOWS_H && defined(WIN32) 120 /* If windows.h was already included, our preferences don't matter. 121 * If not, include a restricted set of windows headers to our tastes. 122 */ 123 #ifndef _WINDOWS_ 124 125 #ifndef WIN32_LEAN_AND_MEAN 126 #define WIN32_LEAN_AND_MEAN 127 #endif 128 129 #ifndef _WIN32_WINNT 130 /* Restrict the server to a subset of Windows XP header files by default 131 */ 132 #define _WIN32_WINNT 0x0501 133 #endif 134 135 #ifndef NOUSER 136 #define NOUSER 137 #endif 138 #ifndef NOMCX 139 #define NOMCX 140 #endif 141 #ifndef NOIME 142 #define NOIME 143 #endif 144 145 #include <windows.h> 146 /* 147 * Add a _very_few_ declarations missing from the restricted set of headers 148 * (If this list becomes extensive, re-enable the required headers above!) 149 * winsock headers were excluded by WIN32_LEAN_AND_MEAN, so include them now 150 */ 151 #define SW_HIDE 0 152 #ifndef _WIN32_WCE 153 #include <winsock2.h> 154 #include <ws2tcpip.h> 155 #include <mswsock.h> 156 #else 157 #include <winsock.h> 158 #endif 159 160 #endif /* ndef _WINDOWS_ */ 161 #endif /* APR_HAVE_WINDOWS_H */ 162 163 #if APR_HAVE_SYS_TYPES_H 164 #include <sys/types.h> 165 #endif 166 167 #if APR_HAVE_SYS_SOCKET_H 168 #include <sys/socket.h> 169 #endif 170 171 #if defined(__cplusplus) && !defined(__STDC_CONSTANT_MACROS) 172 /* C99 7.18.4 requires that stdint.h only exposes INT64_C 173 * and UINT64_C for C++ implementations if this is defined: */ 174 #define __STDC_CONSTANT_MACROS 175 #endif 176 177 #if APR_HAVE_STDINT_H 178 #include <stdint.h> 179 #endif 180 181 #if APR_HAVE_SYS_WAIT_H 182 #include <sys/wait.h> 183 #endif 184 185 #ifdef OS2 186 #define INCL_DOS 187 #define INCL_DOSERRORS 188 #include <os2.h> 189 #endif 190 191 /* header files for PATH_MAX, _POSIX_PATH_MAX */ 192 #if APR_HAVE_LIMITS_H 193 #include <limits.h> 194 #else 195 #if APR_HAVE_SYS_SYSLIMITS_H 196 #include <sys/syslimits.h> 197 #endif 198 #endif 199 200 201 #ifdef __cplusplus 202 extern "C" { 203 #endif 204 205 /** 206 * @addtogroup apr_platform 207 * @ingroup APR 208 * @{ 209 */ 210 211 #define APR_HAVE_SHMEM_MMAP_TMP 1 212 #define APR_HAVE_SHMEM_MMAP_SHM 1 213 #define APR_HAVE_SHMEM_MMAP_ZERO 1 214 #define APR_HAVE_SHMEM_SHMGET_ANON 1 215 #define APR_HAVE_SHMEM_SHMGET 1 216 #define APR_HAVE_SHMEM_MMAP_ANON 1 217 #define APR_HAVE_SHMEM_BEOS 0 218 219 #define APR_USE_SHMEM_MMAP_TMP 0 220 #define APR_USE_SHMEM_MMAP_SHM 0 221 #define APR_USE_SHMEM_MMAP_ZERO 0 222 #define APR_USE_SHMEM_SHMGET_ANON 0 223 #define APR_USE_SHMEM_SHMGET 0 224 #define APR_USE_SHMEM_MMAP_ANON 1 225 #define APR_USE_SHMEM_BEOS 0 226 227 #define APR_USE_FLOCK_SERIALIZE 0 228 #define APR_USE_SYSVSEM_SERIALIZE 0 229 #define APR_USE_POSIXSEM_SERIALIZE 0 230 #define APR_USE_FCNTL_SERIALIZE 0 231 #define APR_USE_PROC_PTHREAD_SERIALIZE 0 232 #define APR_USE_PTHREAD_SERIALIZE 1 233 234 #define APR_HAS_FLOCK_SERIALIZE 1 235 #define APR_HAS_SYSVSEM_SERIALIZE 0 236 #define APR_HAS_POSIXSEM_SERIALIZE 1 237 #define APR_HAS_FCNTL_SERIALIZE 1 238 #define APR_HAS_PROC_PTHREAD_SERIALIZE 1 239 240 #define APR_PROCESS_LOCK_IS_GLOBAL 0 241 242 #define APR_HAVE_CORKABLE_TCP 1 243 #define APR_HAVE_GETRLIMIT 1 244 #define APR_HAVE_IN_ADDR 1 245 #define APR_HAVE_INET_ADDR 1 246 #define APR_HAVE_INET_NETWORK 1 247 #define APR_HAVE_IPV6 1 248 #define APR_HAVE_MEMMOVE 1 249 #define APR_HAVE_SETRLIMIT 1 250 #define APR_HAVE_SIGACTION 1 251 #define APR_HAVE_SIGSUSPEND 1 252 #define APR_HAVE_SIGWAIT 1 253 #define APR_HAVE_SA_STORAGE 1 254 #define APR_HAVE_STRCASECMP 1 255 #define APR_HAVE_STRDUP 1 256 #define APR_HAVE_STRICMP 0 257 #define APR_HAVE_STRNCASECMP 1 258 #define APR_HAVE_STRNICMP 0 259 #define APR_HAVE_STRSTR 1 260 #define APR_HAVE_MEMCHR 1 261 #define APR_HAVE_STRUCT_RLIMIT 1 262 #define APR_HAVE_UNION_SEMUN 0 263 #define APR_HAVE_SCTP 0 264 #define APR_HAVE_IOVEC 1 265 266 /* APR Feature Macros */ 267 #define APR_HAS_SHARED_MEMORY 1 268 #define APR_HAS_THREADS 1 269 #define APR_HAS_SENDFILE 1 270 #define APR_HAS_MMAP 1 271 #define APR_HAS_FORK 1 272 #define APR_HAS_RANDOM 1 273 #define APR_HAS_OTHER_CHILD 1 274 #define APR_HAS_DSO 1 275 #define APR_HAS_SO_ACCEPTFILTER 0 276 #define APR_HAS_UNICODE_FS 0 277 #define APR_HAS_PROC_INVOKED 0 278 #define APR_HAS_USER 1 279 #define APR_HAS_LARGE_FILES 0 280 #define APR_HAS_XTHREAD_FILES 0 281 #define APR_HAS_OS_UUID 0 282 283 #define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD 0 284 285 /* APR sets APR_FILES_AS_SOCKETS to 1 on systems where it is possible 286 * to poll on files/pipes. 287 */ 288 #define APR_FILES_AS_SOCKETS 1 289 290 /* This macro indicates whether or not EBCDIC is the native character set. 291 */ 292 #define APR_CHARSET_EBCDIC 0 293 294 /* If we have a TCP implementation that can be "corked", what flag 295 * do we use? 296 */ 297 #define APR_TCP_NOPUSH_FLAG TCP_CORK 298 299 /* Is the TCP_NODELAY socket option inherited from listening sockets? 300 */ 301 #define APR_TCP_NODELAY_INHERITED 1 302 303 /* Is the O_NONBLOCK flag inherited from listening sockets? 304 */ 305 #define APR_O_NONBLOCK_INHERITED 0 306 307 /* Typedefs that APR needs. */ 308 309 typedef unsigned char apr_byte_t; 310 311 typedef short apr_int16_t; 312 typedef unsigned short apr_uint16_t; 313 314 typedef int apr_int32_t; 315 typedef unsigned int apr_uint32_t; 316 317 #define APR_SIZEOF_VOIDP 8 318 319 /* 320 * Darwin 10's default compiler (gcc42) builds for both 64 and 321 * 32 bit architectures unless specifically told not to. 322 * In those cases, we need to override types depending on how 323 * we're being built at compile time. 324 * NOTE: This is an ugly work-around for Darwin's 325 * concept of universal binaries, a single package 326 * (executable, lib, etc...) which contains both 32 327 * and 64 bit versions. The issue is that if APR is 328 * built universally, if something else is compiled 329 * against it, some bit sizes will depend on whether 330 * it is 32 or 64 bit. This is determined by the __LP64__ 331 * flag. Since we need to support both, we have to 332 * handle OS X unqiuely. 333 */ 334 #ifdef DARWIN_10 335 #undef APR_SIZEOF_VOIDP 336 #undef INT64_C 337 #undef UINT64_C 338 #ifdef __LP64__ 339 typedef long apr_int64_t; 340 typedef unsigned long apr_uint64_t; 341 #define APR_SIZEOF_VOIDP 8 342 #define INT64_C(v) (v ## L) 343 #define UINT64_C(v) (v ## UL) 344 #else 345 typedef long long apr_int64_t; 346 typedef unsigned long long apr_uint64_t; 347 #define APR_SIZEOF_VOIDP 4 348 #define INT64_C(v) (v ## LL) 349 #define UINT64_C(v) (v ## ULL) 350 #endif 351 #else 352 typedef long long apr_int64_t; 353 typedef unsigned long long apr_uint64_t; 354 #endif 355 356 typedef size_t apr_size_t; 357 typedef ssize_t apr_ssize_t; 358 typedef off_t apr_off_t; 359 typedef socklen_t apr_socklen_t; 360 typedef ino_t apr_ino_t; 361 362 #if APR_SIZEOF_VOIDP == 8 363 typedef apr_uint64_t apr_uintptr_t; 364 #else 365 typedef apr_uint32_t apr_uintptr_t; 366 #endif 367 368 /* Are we big endian? */ 369 #define APR_IS_BIGENDIAN 0 370 371 /* Mechanisms to properly type numeric literals */ 372 #define APR_INT64_C(val) INT64_C(val) 373 #define APR_UINT64_C(val) UINT64_C(val) 374 375 #ifdef INT16_MIN 376 #define APR_INT16_MIN INT16_MIN 377 #else 378 #define APR_INT16_MIN (-0x7fff - 1) 379 #endif 380 381 #ifdef INT16_MAX 382 #define APR_INT16_MAX INT16_MAX 383 #else 384 #define APR_INT16_MAX (0x7fff) 385 #endif 386 387 #ifdef UINT16_MAX 388 #define APR_UINT16_MAX UINT16_MAX 389 #else 390 #define APR_UINT16_MAX (0xffff) 391 #endif 392 393 #ifdef INT32_MIN 394 #define APR_INT32_MIN INT32_MIN 395 #else 396 #define APR_INT32_MIN (-0x7fffffff - 1) 397 #endif 398 399 #ifdef INT32_MAX 400 #define APR_INT32_MAX INT32_MAX 401 #else 402 #define APR_INT32_MAX 0x7fffffff 403 #endif 404 405 #ifdef UINT32_MAX 406 #define APR_UINT32_MAX UINT32_MAX 407 #else 408 #define APR_UINT32_MAX (0xffffffffU) 409 #endif 410 411 #ifdef INT64_MIN 412 #define APR_INT64_MIN INT64_MIN 413 #else 414 #define APR_INT64_MIN (APR_INT64_C(-0x7fffffffffffffff) - 1) 415 #endif 416 417 #ifdef INT64_MAX 418 #define APR_INT64_MAX INT64_MAX 419 #else 420 #define APR_INT64_MAX APR_INT64_C(0x7fffffffffffffff) 421 #endif 422 423 #ifdef UINT64_MAX 424 #define APR_UINT64_MAX UINT64_MAX 425 #else 426 #define APR_UINT64_MAX APR_UINT64_C(0xffffffffffffffff) 427 #endif 428 429 #define APR_SIZE_MAX (~((apr_size_t)0)) 430 431 432 /* Definitions that APR programs need to work properly. */ 433 434 /** 435 * APR public API wrap for C++ compilers. 436 */ 437 #ifdef __cplusplus 438 #define APR_BEGIN_DECLS extern "C" { 439 #define APR_END_DECLS } 440 #else 441 #define APR_BEGIN_DECLS 442 #define APR_END_DECLS 443 #endif 444 445 /** 446 * Thread callbacks from APR functions must be declared with APR_THREAD_FUNC, 447 * so that they follow the platform's calling convention. 448 * <PRE> 449 * 450 * void* APR_THREAD_FUNC my_thread_entry_fn(apr_thread_t *thd, void *data); 451 * 452 * </PRE> 453 */ 454 #define APR_THREAD_FUNC 455 456 #if defined(DOXYGEN) || !defined(WIN32) 457 458 /** 459 * The public APR functions are declared with APR_DECLARE(), so they may 460 * use the most appropriate calling convention. Public APR functions with 461 * variable arguments must use APR_DECLARE_NONSTD(). 462 * 463 * @remark Both the declaration and implementations must use the same macro. 464 * 465 * <PRE> 466 * APR_DECLARE(rettype) apr_func(args) 467 * </PRE> 468 * @see APR_DECLARE_NONSTD @see APR_DECLARE_DATA 469 * @remark Note that when APR compiles the library itself, it passes the 470 * symbol -DAPR_DECLARE_EXPORT to the compiler on some platforms (e.g. Win32) 471 * to export public symbols from the dynamic library build.\n 472 * The user must define the APR_DECLARE_STATIC when compiling to target 473 * the static APR library on some platforms (e.g. Win32.) The public symbols 474 * are neither exported nor imported when APR_DECLARE_STATIC is defined.\n 475 * By default, compiling an application and including the APR public 476 * headers, without defining APR_DECLARE_STATIC, will prepare the code to be 477 * linked to the dynamic library. 478 */ 479 #define APR_DECLARE(type) type 480 481 /** 482 * The public APR functions using variable arguments are declared with 483 * APR_DECLARE_NONSTD(), as they must follow the C language calling convention. 484 * @see APR_DECLARE @see APR_DECLARE_DATA 485 * @remark Both the declaration and implementations must use the same macro. 486 * <PRE> 487 * 488 * APR_DECLARE_NONSTD(rettype) apr_func(args, ...); 489 * 490 * </PRE> 491 */ 492 #define APR_DECLARE_NONSTD(type) type 493 494 /** 495 * The public APR variables are declared with AP_MODULE_DECLARE_DATA. 496 * This assures the appropriate indirection is invoked at compile time. 497 * @see APR_DECLARE @see APR_DECLARE_NONSTD 498 * @remark Note that the declaration and implementations use different forms, 499 * but both must include the macro. 500 * 501 * <PRE> 502 * 503 * extern APR_DECLARE_DATA type apr_variable;\n 504 * APR_DECLARE_DATA type apr_variable = value; 505 * 506 * </PRE> 507 */ 508 #define APR_DECLARE_DATA 509 510 #elif defined(APR_DECLARE_STATIC) 511 #define APR_DECLARE(type) type __stdcall 512 #define APR_DECLARE_NONSTD(type) type __cdecl 513 #define APR_DECLARE_DATA 514 #elif defined(APR_DECLARE_EXPORT) 515 #define APR_DECLARE(type) __declspec(dllexport) type __stdcall 516 #define APR_DECLARE_NONSTD(type) __declspec(dllexport) type __cdecl 517 #define APR_DECLARE_DATA __declspec(dllexport) 518 #else 519 #define APR_DECLARE(type) __declspec(dllimport) type __stdcall 520 #define APR_DECLARE_NONSTD(type) __declspec(dllimport) type __cdecl 521 #define APR_DECLARE_DATA __declspec(dllimport) 522 #endif 523 524 /* Define APR_SSIZE_T_FMT. 525 * If ssize_t is an integer we define it to be "d", 526 * if ssize_t is a long int we define it to be "ld", 527 * if ssize_t is neither we declare an error here. 528 * I looked for a better way to define this here, but couldn't find one, so 529 * to find the logic for this definition search for "ssize_t_fmt" in 530 * configure.in. 531 */ 532 533 #define APR_SSIZE_T_FMT "ld" 534 535 /* And APR_SIZE_T_FMT */ 536 #define APR_SIZE_T_FMT "lu" 537 538 /* And APR_OFF_T_FMT */ 539 #define APR_OFF_T_FMT "ld" 540 541 /* And APR_PID_T_FMT */ 542 #define APR_PID_T_FMT "d" 543 544 /* And APR_INT64_T_FMT */ 545 #define APR_INT64_T_FMT "ld" 546 547 /* And APR_UINT64_T_FMT */ 548 #define APR_UINT64_T_FMT "lu" 549 550 /* And APR_UINT64_T_HEX_FMT */ 551 #define APR_UINT64_T_HEX_FMT "lx" 552 553 /* 554 * Ensure we work with universal binaries on Darwin 555 */ 556 #ifdef DARWIN_10 557 558 #undef APR_HAS_LARGE_FILES 559 #undef APR_SIZEOF_VOIDP 560 #undef APR_INT64_T_FMT 561 #undef APR_UINT64_T_FMT 562 #undef APR_UINT64_T_HEX_FMT 563 564 #ifdef __LP64__ 565 #define APR_HAS_LARGE_FILES 0 566 #define APR_SIZEOF_VOIDP 8 567 #define APR_INT64_T_FMT "ld" 568 #define APR_UINT64_T_FMT "lu" 569 #define APR_UINT64_T_HEX_FMT "lx" 570 #else 571 #define APR_HAS_LARGE_FILES 1 572 #define APR_SIZEOF_VOIDP 4 573 #define APR_INT64_T_FMT "lld" 574 #define APR_UINT64_T_FMT "llu" 575 #define APR_UINT64_T_HEX_FMT "llx" 576 #endif 577 578 #undef APR_IS_BIGENDIAN 579 #ifdef __BIG_ENDIAN__ 580 #define APR_IS_BIGENDIAN 1 581 #else 582 #define APR_IS_BIGENDIAN 0 583 #endif 584 585 #undef APR_OFF_T_FMT 586 #define APR_OFF_T_FMT "lld" 587 588 #endif /* DARWIN_10 */ 589 590 /* Does the proc mutex lock threads too */ 591 #define APR_PROC_MUTEX_IS_GLOBAL 0 592 593 /* Local machine definition for console and log output. */ 594 #define APR_EOL_STR "\n" 595 596 #if APR_HAVE_SYS_WAIT_H 597 #ifdef WEXITSTATUS 598 #define apr_wait_t int 599 #else 600 #define apr_wait_t union wait 601 #define WEXITSTATUS(status) (int)((status).w_retcode) 602 #define WTERMSIG(status) (int)((status).w_termsig) 603 #endif /* !WEXITSTATUS */ 604 #elif defined(__MINGW32__) 605 typedef int apr_wait_t; 606 #endif /* HAVE_SYS_WAIT_H */ 607 608 #if defined(PATH_MAX) 609 #define APR_PATH_MAX PATH_MAX 610 #elif defined(_POSIX_PATH_MAX) 611 #define APR_PATH_MAX _POSIX_PATH_MAX 612 #else 613 #error no decision has been made on APR_PATH_MAX for your platform 614 #endif 615 616 #define APR_DSOPATH "LD_LIBRARY_PATH" 617 618 /** @} */ 619 620 /* Definitions that only Win32 programs need to compile properly. */ 621 622 /* XXX These simply don't belong here, perhaps in apr_portable.h 623 * based on some APR_HAVE_PID/GID/UID? 624 */ 625 #ifdef __MINGW32__ 626 #ifndef __GNUC__ 627 typedef int pid_t; 628 #endif 629 typedef int uid_t; 630 typedef int gid_t; 631 #endif 632 633 #ifdef __cplusplus 634 } 635 #endif 636 637 #endif /* APR_H */ 638