Annotation of win32/apache13/src/include/ap_config.h, revision 1.1
1.1 ! parser 1: /* ====================================================================
! 2: * Copyright (c) 1995-1999 The Apache Group. All rights reserved.
! 3: *
! 4: * Redistribution and use in source and binary forms, with or without
! 5: * modification, are permitted provided that the following conditions
! 6: * are met:
! 7: *
! 8: * 1. Redistributions of source code must retain the above copyright
! 9: * notice, this list of conditions and the following disclaimer.
! 10: *
! 11: * 2. Redistributions in binary form must reproduce the above copyright
! 12: * notice, this list of conditions and the following disclaimer in
! 13: * the documentation and/or other materials provided with the
! 14: * distribution.
! 15: *
! 16: * 3. All advertising materials mentioning features or use of this
! 17: * software must display the following acknowledgment:
! 18: * "This product includes software developed by the Apache Group
! 19: * for use in the Apache HTTP server project (http://www.apache.org/)."
! 20: *
! 21: * 4. The names "Apache Server" and "Apache Group" must not be used to
! 22: * endorse or promote products derived from this software without
! 23: * prior written permission. For written permission, please contact
! 24: * apache@apache.org.
! 25: *
! 26: * 5. Products derived from this software may not be called "Apache"
! 27: * nor may "Apache" appear in their names without prior written
! 28: * permission of the Apache Group.
! 29: *
! 30: * 6. Redistributions of any form whatsoever must retain the following
! 31: * acknowledgment:
! 32: * "This product includes software developed by the Apache Group
! 33: * for use in the Apache HTTP server project (http://www.apache.org/)."
! 34: *
! 35: * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
! 36: * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 37: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
! 38: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR
! 39: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
! 40: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
! 41: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
! 42: * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 43: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
! 44: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
! 45: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
! 46: * OF THE POSSIBILITY OF SUCH DAMAGE.
! 47: * ====================================================================
! 48: *
! 49: * This software consists of voluntary contributions made by many
! 50: * individuals on behalf of the Apache Group and was originally based
! 51: * on public domain software written at the National Center for
! 52: * Supercomputing Applications, University of Illinois, Urbana-Champaign.
! 53: * For more information on the Apache Group and the Apache HTTP server
! 54: * project, please see <http://www.apache.org/>.
! 55: *
! 56: */
! 57:
! 58: #ifndef AP_CONFIG_H
! 59: #define AP_CONFIG_H
! 60:
! 61: #ifdef __cplusplus
! 62: extern "C" {
! 63: #endif
! 64:
! 65: /*
! 66: * ap_config.h: system-dependant #defines and includes...
! 67: * See PORTING for a listing of what they mean
! 68: */
! 69:
! 70: #include "ap_mmn.h" /* MODULE_MAGIC_NUMBER_ */
! 71:
! 72: /*
! 73: * Support for platform dependent autogenerated defines
! 74: */
! 75: #if !defined(WIN32) && !defined(NETWARE)
! 76: #include "ap_config_auto.h"
! 77: #else
! 78: /* not available under WIN32, so provide important entries manually */
! 79: #undef HAVE_UNISTD_H
! 80: #endif
! 81:
! 82: /* Have to include sys/stat.h before ../os/win32/os.h so we can override
! 83: stat() properly */
! 84: #ifndef NETWARE
! 85: #include <sys/types.h>
! 86: #endif
! 87: #include <sys/stat.h>
! 88:
! 89:
! 90: /* So that we can use inline on some critical functions, and use
! 91: * GNUC attributes (such as to get -Wall warnings for printf-like
! 92: * functions). Only do this in gcc 2.7 or later ... it may work
! 93: * on earlier stuff, but why chance it.
! 94: *
! 95: * We've since discovered that the gcc shipped with NeXT systems
! 96: * as "cc" is completely broken. It claims to be __GNUC__ and so
! 97: * on, but it doesn't implement half of the things that __GNUC__
! 98: * means. In particular it's missing inline and the __attribute__
! 99: * stuff. So we hack around it. PR#1613. -djg
! 100: */
! 101: #if !defined(__GNUC__) || __GNUC__ < 2 || \
! 102: (__GNUC__ == 2 && __GNUC_MINOR__ < 7) ||\
! 103: defined(NEXT)
! 104: #define ap_inline
! 105: #define __attribute__(__x)
! 106: #define ENUM_BITFIELD(e,n,w) signed int n : w
! 107: #else
! 108: #define ap_inline __inline__
! 109: #define USE_GNU_INLINE
! 110: #define ENUM_BITFIELD(e,n,w) e n : w
! 111: #endif
! 112:
! 113: #ifdef WIN32
! 114: #include "../os/win32/os.h"
! 115: #else
! 116: #include "os.h"
! 117: #endif
! 118:
! 119: /* Define one of these according to your system. */
! 120: #if defined(MINT)
! 121: typedef int rlim_t;
! 122: #define JMP_BUF sigjmp_buf
! 123: #define NO_LONG_DOUBLE
! 124: #define USE_FLOCK_SERIALIZED_ACCEPT
! 125: #define _BSD_SOURCE
! 126: #define EAGAIN EWOULDBLOCK
! 127: int initgroups (char *, int);
! 128: char *crypt (const char *pw, const char *salt);
! 129: int gethostname (char *name, int namelen);
! 130:
! 131: #elif defined(MPE)
! 132: #include <sys/times.h>
! 133: #define NO_SETSID
! 134: #define NO_KILLPG
! 135: #define NO_WRITEV
! 136: #define HAVE_SHMGET 1
! 137: #define USE_SHMGET_SCOREBOARD
! 138: /*
! 139: UID/GID isn't a native concept for MPE, and it's definitely not a 100%
! 140: Unix implementation. There isn't a traditional superuser concept either,
! 141: so we're forced to liberalize SHM security a bit so the parent & children
! 142: can communicate when they're running with different UIDs within the same
! 143: GID (the GID will *always* be the same on MPE). Thus the weird SHM_R and
! 144: SHM_W below.
! 145: */
! 146: #define SHM_R 0440 /* Read permission */
! 147: #define SHM_W 0220 /* Write permission */
! 148: #define NEED_INITGROUPS
! 149: #define NEED_STRCASECMP
! 150: #define NEED_STRDUP
! 151: #define NEED_STRNCASECMP
! 152: extern void GETPRIVMODE();
! 153: extern void GETUSERMODE();
! 154: extern char *inet_ntoa();
! 155: #define NO_SLACK
! 156: #define S_IEXEC S_IXUSR
! 157: #define S_IREAD S_IRUSR
! 158: #define S_IWRITE S_IWUSR
! 159: #define PF_INET AF_INET
! 160: #define USE_FCNTL_SERIALIZED_ACCEPT
! 161:
! 162: #elif defined(SUNOS4)
! 163: #define HAVE_GMTOFF 1
! 164: #undef NO_KILLPG
! 165: #undef NO_SETSID
! 166: char *crypt(const char *pw, const char *salt);
! 167: char *mktemp(char *);
! 168: #define HAVE_MMAP 1
! 169: #define USE_MMAP_SCOREBOARD
! 170: #define USE_MMAP_FILES
! 171: #include <sys/time.h>
! 172: #define NEED_STRERROR
! 173: typedef int rlim_t;
! 174: #define memmove(a,b,c) bcopy(b,a,c)
! 175: #define NO_LINGCLOSE
! 176: #define USE_FLOCK_SERIALIZED_ACCEPT
! 177: #define NEED_DIFFTIME
! 178: #define HAVE_SYSLOG 1
! 179:
! 180: #elif defined(SOLARIS2)
! 181: #undef HAVE_GMTOFF
! 182: #define NO_KILLPG
! 183: #undef NO_SETSID
! 184: #define bzero(a,b) memset(a,0,b)
! 185: #if !defined(USE_SYSVSEM_SERIALIZED_ACCEPT) && \
! 186: !defined(USE_PTHREAD_SERIALIZED_ACCEPT)
! 187: #define USE_FCNTL_SERIALIZED_ACCEPT
! 188: #endif
! 189: #define NEED_UNION_SEMUN
! 190: #define HAVE_MMAP 1
! 191: #define USE_MMAP_SCOREBOARD
! 192: #define USE_MMAP_FILES
! 193: int gethostname(char *name, int namelen);
! 194: #define HAVE_SYSLOG 1
! 195: #define SYS_SIGLIST _sys_siglist
! 196:
! 197: #elif defined(IRIX)
! 198: #undef HAVE_GMTOFF
! 199: /* IRIX has killpg, but it's only in _BSD_COMPAT, so don't use it in case
! 200: * there's some weird conflict with non-BSD signals */
! 201: #define NO_KILLPG
! 202: #undef NO_SETSID
! 203: #if !defined(USE_FLOCK_SERIALIZED_ACCEPT) && \
! 204: !defined(USE_USLOCK_SERIALIZED_ACCEPT) && \
! 205: !defined(USE_SYSVSEM_SERIALIZED_ACCEPT)
! 206: #define USE_FCNTL_SERIALIZED_ACCEPT
! 207: #endif
! 208: #define HAVE_SHMGET 1
! 209: #define USE_SHMGET_SCOREBOARD
! 210: #define HAVE_MMAP 1
! 211: #define USE_MMAP_FILES
! 212: #define NO_LONG_DOUBLE
! 213: #define NO_LINGCLOSE
! 214: #define HAVE_SYSLOG 1
! 215:
! 216: #elif defined(HIUX)
! 217: #undef HAVE_GMTOFF
! 218: #define NO_KILLPG
! 219: #undef NO_SETSID
! 220: #ifndef _HIUX_SOURCE
! 221: #define _HIUX_SOURCE
! 222: #endif
! 223: #define HAVE_SHMGET 1
! 224: #define USE_SHMGET_SCOREBOARD
! 225: #define SELECT_NEEDS_CAST
! 226: #define HAVE_SYSLOG 1
! 227:
! 228: #elif defined(HPUX) || defined(HPUX10)
! 229: #undef HAVE_GMTOFF
! 230: #define NO_KILLPG
! 231: #undef NO_SETSID
! 232: #define USE_FCNTL_SERIALIZED_ACCEPT
! 233: #ifndef _HPUX_SOURCE
! 234: #define _HPUX_SOURCE
! 235: #endif
! 236: #define HAVE_SHMGET 1
! 237: #define USE_SHMGET_SCOREBOARD
! 238: #define HAVE_SYSLOG 1
! 239: #ifndef HPUX10
! 240: #define SELECT_NEEDS_CAST
! 241: typedef int rlim_t;
! 242: #endif
! 243:
! 244: #elif defined(HPUX11)
! 245: #ifndef _HPUX_SOURCE
! 246: #define _HPUX_SOURCE
! 247: #endif
! 248: #define HAVE_SHMGET
! 249: #define USE_SHMGET_SCOREBOARD
! 250: #undef HAVE_GMTOFF
! 251: #define USE_FCNTL_SERIALIZED_ACCEPT
! 252: /* feeling brave? want to try using POSIX mutexes? */
! 253: /* #define HAVE_MMAP */
! 254: /* #define USE_MMAP_SCOREBOARD */
! 255: /* #define USE_MMAP_FILES */
! 256: /* #define USE_PTHREAD_SERIALIZED_ACCEPT */
! 257: #define NO_KILLPG
! 258: #undef NO_SETSID
! 259: #define HAVE_SYSLOG
! 260:
! 261: #elif defined(AIX)
! 262: #undef HAVE_GMTOFF
! 263: #undef NO_KILLPG
! 264: #undef NO_SETSID
! 265: #ifndef __ps2__
! 266: #define HAVE_MMAP 1
! 267: #define USE_MMAP_SCOREBOARD
! 268: #define USE_MMAP_FILES
! 269: #define HAVE_SYSLOG 1
! 270: #ifndef DEFAULT_GROUP
! 271: #define DEFAULT_GROUP "nobody"
! 272: #endif
! 273: #endif
! 274: #ifndef DEFAULT_USER
! 275: #define DEFAULT_USER "nobody"
! 276: #endif
! 277: #ifdef NEED_RLIM_T
! 278: typedef int rlim_t;
! 279: #endif
! 280: #if !defined(USE_PTHREAD_SERIALIZED_ACCEPT)
! 281: #define USE_FCNTL_SERIALIZED_ACCEPT
! 282: #endif
! 283: #ifdef USEBCOPY
! 284: #define memmove(a,b,c) bcopy(b,a,c)
! 285: #endif
! 286: #if AIX >= 42
! 287: #define NET_SIZE_T size_t
! 288: #endif
! 289:
! 290: #elif defined(ULTRIX)
! 291: /* we don't want to use sys/resource.h under
! 292: Ultrix although this header exists. */
! 293: #undef HAVE_SYS_RESOURCE_H
! 294: #define HAVE_GMTOFF 1
! 295: #undef NO_KILLPG
! 296: #undef NO_SETSID
! 297: #define ULTRIX_BRAIN_DEATH
! 298: #define NEED_STRDUP
! 299: /* If you have Ultrix 4.3, and are using cc, const is broken */
! 300: #ifndef __ultrix__ /* Hack to check for pre-Ultrix 4.4 cc */
! 301: #define const /* Not implemented */
! 302: #endif
! 303:
! 304: #elif defined(OSF1)
! 305: #define HAVE_GMTOFF 1
! 306: #undef NO_KILLPG
! 307: #undef NO_SETSID
! 308: #define HAVE_MMAP 1
! 309: #define USE_MMAP_SCOREBOARD
! 310: #define USE_MMAP_FILES
! 311: #define NO_LONG_DOUBLE
! 312: #define HAVE_SYSLOG 1
! 313: #define USE_FLOCK_SERIALIZED_ACCEPT
! 314: #define SINGLE_LISTEN_UNSERIALIZED_ACCEPT
! 315:
! 316: #elif defined(PARAGON)
! 317: #define HAVE_GMTOFF 1
! 318: #undef NO_KILLPG
! 319: #undef NO_SETSID
! 320: #define HAVE_MMAP 1
! 321: #define USE_MMAP_SCOREBOARD
! 322: #define USE_MMAP_FILES
! 323: #define NO_LONG_DOUBLE
! 324: #define HAVE_SYSLOG 1
! 325: typedef int rlim_t;
! 326:
! 327: #elif defined(SEQUENT)
! 328: #define DEFAULT_USER "nobody"
! 329: #define DEFAULT_GROUP "nobody"
! 330: #define NO_SHMGET 1
! 331: #define HAVE_MMAP 1
! 332: #define HAVE_SYSLOG 1
! 333: #define USE_MMAP_FILES 1
! 334: #define USE_MMAP_SCOREBOARD 1
! 335: #define USE_FCNTL_SERIALIZED_ACCEPT 1
! 336: #define JMP_BUF sigjmp_buf
! 337: #undef NO_SETSID
! 338: #if SEQUENT < 40
! 339: typedef int rlim_t;
! 340: #define NO_GETTIMEOFDAY
! 341: #undef HAVE_SYS_RESOURCE_H /* exists but does not provide *rlimit funcs */
! 342: #include <sys/times.h>
! 343: #endif
! 344: #if SEQUENT < 42
! 345: #define NEED_STRCASECMP
! 346: #define NEED_STRNCASECMP
! 347: #endif
! 348: #if SEQUENT < 44
! 349: #define NO_KILLPG 1
! 350: #define NET_SIZE_T int
! 351: #endif
! 352: #if SEQUENT >= 44
! 353: #undef NO_KILLPG
! 354: #define NET_SIZE_T size_t
! 355: #endif
! 356:
! 357: #elif defined(NEXT)
! 358: typedef unsigned short mode_t;
! 359: typedef int rlim_t;
! 360: #define HAVE_GMTOFF 1
! 361: #undef NO_KILLPG
! 362: #define NO_SETSID
! 363: #define NEED_STRDUP
! 364: #define NO_LINGCLOSE
! 365: #undef _POSIX_SOURCE
! 366: #ifndef FD_CLOEXEC
! 367: #define FD_CLOEXEC 1
! 368: #endif
! 369: #ifndef S_ISDIR
! 370: #define S_ISDIR(m) (((m)&(S_IFMT)) == (S_IFDIR))
! 371: #endif
! 372: #ifndef S_ISREG
! 373: #define S_ISREG(m) (((m)&(S_IFMT)) == (S_IFREG))
! 374: #endif
! 375: #ifndef S_IXUSR
! 376: #define S_IXUSR 00100
! 377: #endif
! 378: #ifndef S_IRGRP
! 379: #define S_IRGRP 00040
! 380: #endif
! 381: #ifndef S_IXGRP
! 382: #define S_IXGRP 00010
! 383: #endif
! 384: #ifndef S_IROTH
! 385: #define S_IROTH 00004
! 386: #endif
! 387: #ifndef S_IXOTH
! 388: #define S_IXOTH 00001
! 389: #endif
! 390: #ifndef S_IRUSR
! 391: #define S_IRUSR S_IREAD
! 392: #endif
! 393: #ifndef S_IWUSR
! 394: #define S_IWUSR S_IWRITE
! 395: #endif
! 396: #ifndef S_IWGRP
! 397: #define S_IWGRP 000020
! 398: #endif
! 399: #ifndef S_IWOTH
! 400: #define S_IWOTH 000002
! 401: #endif
! 402:
! 403: #define STDIN_FILENO 0
! 404: #define STDOUT_FILENO 1
! 405: #define STDERR_FILENO 2
! 406:
! 407: /* PR#2293 fix */
! 408: #define ap_wait_t union wait
! 409: #define waitpid(a,b,c) wait4((a) == -1 ? 0 : (a),(union wait *)(b),c,NULL)
! 410: #define WEXITSTATUS(status) (int)( WIFEXITED(status) ? ( (status).w_retcode ) : -1)
! 411: #define WTERMSIG(status) (int)( (status).w_termsig )
! 412:
! 413: typedef int pid_t;
! 414: #define USE_LONGJMP
! 415: #define NO_USE_SIGACTION
! 416: #define HAVE_SYSLOG 1
! 417:
! 418: #if defined(__DYNAMIC__)
! 419: #define HAVE_DYLD
! 420: #define DYLD_CANT_UNLOAD
! 421: #endif
! 422:
! 423: #elif defined(DARWIN) /* Darwin (Mac OS) */
! 424: #undef PLATFORM
! 425: #define PLATFORM "Darwin"
! 426: #define HAVE_DYLD
! 427: #define HAVE_GMTOFF
! 428: #define HAVE_MMAP
! 429: #define USE_MMAP_FILES
! 430: #define USE_MMAP_SCOREBOARD
! 431: #ifdef MAC_OS_X_SERVER
! 432: #define MAP_TMPFILE
! 433: #endif /* MAC_OS_X_SERVER */
! 434: #define HAVE_RESOURCE
! 435: #define HAVE_SNPRINTF
! 436: #define JMP_BUF jmp_buf
! 437: #define USE_LONGJMP
! 438: #define USE_FLOCK_SERIALIZED_ACCEPT
! 439: #define SINGLE_LISTEN_UNSERIALIZED_ACCEPT
! 440: /*
! 441: * If you are using APACI, (you probably should be on Mac OS) these
! 442: * values are set at configure time.
! 443: */
! 444: #ifndef HTTPD_ROOT
! 445: #define HTTPD_ROOT "/Local/Library/WebServer"
! 446: #endif
! 447: #ifndef DOCUMENT_LOCATION
! 448: #define DOCUMENT_LOCATION HTTPD_ROOT "/Documents"
! 449: #endif
! 450: #ifndef DEFAULT_XFERLOG
! 451: #define DEFAULT_XFERLOG "Logs/Access"
! 452: #endif
! 453: #ifndef DEFAULT_ERRORLOG
! 454: #define DEFAULT_ERRORLOG "Logs/Errors"
! 455: #endif
! 456: #ifndef DEFAULT_PIDLOG
! 457: #define DEFAULT_PIDLOG "Logs/Process"
! 458: #endif
! 459: #ifndef DEFAULT_SCOREBOARD
! 460: #define DEFAULT_SCOREBOARD "Logs/Status"
! 461: #endif
! 462: #ifndef DEFAULT_LOCKFILE
! 463: #define DEFAULT_LOCKFILE "Logs/Lock"
! 464: #endif
! 465: #ifndef SERVER_CONFIG_FILE
! 466: #define SERVER_CONFIG_FILE "Configuration/Server"
! 467: #endif
! 468: #ifndef RESOURCE_CONFIG_FILE
! 469: #define RESOURCE_CONFIG_FILE "Configuration/Resources"
! 470: #endif
! 471: #ifndef TYPES_CONFIG_FILE
! 472: #define TYPES_CONFIG_FILE "Configuration/MIME"
! 473: #endif
! 474: #ifndef ACCESS_CONFIG_FILE
! 475: #define ACCESS_CONFIG_FILE "Configuration/Access"
! 476: #endif
! 477: #ifndef DEFAULT_USER_DIR
! 478: #define DEFAULT_USER_DIR "Library/Web Documents"
! 479: #endif
! 480: #ifndef DEFAULT_USER
! 481: #define DEFAULT_USER "www"
! 482: #endif
! 483: #ifndef DEFAULT_GROUP
! 484: #define DEFAULT_GROUP "www"
! 485: #endif
! 486: #ifndef DEFAULT_PATH
! 487: #define DEFAULT_PATH "/bin:/usr/bin:/usr/local/bin"
! 488: #endif
! 489:
! 490: #elif defined(LINUX)
! 491:
! 492: #if LINUX > 1
! 493: #include <features.h>
! 494:
! 495: /* libc4 systems probably still work, it probably doesn't define
! 496: * __GNU_LIBRARY__
! 497: * libc5 systems define __GNU_LIBRARY__ == 1, but don't define __GLIBC__
! 498: * glibc 2.x and later systems define __GNU_LIBRARY__ == 6, but list it as
! 499: * "deprecated in favour of __GLIBC__"; the value 6 will never be changed.
! 500: * glibc 1.x systems (i.e. redhat 4.x on sparc/alpha) should have
! 501: * __GLIBC__ < 2
! 502: * all glibc based systems need crypt.h
! 503: */
! 504: #if defined(__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1
! 505: #include <crypt.h>
! 506: #endif
! 507:
! 508: /* glibc 2.0.0 through 2.0.4 need size_t * here, where 2.0.5 needs socklen_t *
! 509: * there's no way to discern between these two libraries. But using int should
! 510: * be portable because otherwise these libs would be hopelessly broken with
! 511: * reams of existing networking code. We'll use socklen_t * for 2.1.x and
! 512: * later.
! 513: *
! 514: * int works for all the earlier libs, and is picked up by default later.
! 515: */
! 516: #if defined(__GLIBC__) && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 0))
! 517: #define NET_SIZE_T socklen_t
! 518: #endif
! 519:
! 520: #define HAVE_SHMGET 1
! 521: #define USE_SHMGET_SCOREBOARD
! 522: #define HAVE_MMAP 1
! 523: #define USE_MMAP_FILES
! 524:
! 525: /* flock is faster ... but hasn't been tested on 1.x systems */
! 526: /* PR#3531 indicates flock() may not be stable, probably depends on
! 527: * kernel version. Go back to using fcntl, but provide a way for
! 528: * folks to tweak their Configuration to get flock.
! 529: */
! 530: #ifndef USE_FLOCK_SERIALIZED_ACCEPT
! 531: #define USE_FCNTL_SERIALIZED_ACCEPT
! 532: #endif
! 533:
! 534: #define SYS_SIGLIST _sys_siglist
! 535:
! 536: #else
! 537: #define USE_FCNTL_SERIALIZED_ACCEPT
! 538: #endif
! 539:
! 540: #undef HAVE_GMTOFF
! 541: #undef NO_KILLPG
! 542: #undef NO_SETSID
! 543: #undef NEED_STRDUP
! 544: #include <sys/time.h>
! 545: #define HAVE_SYSLOG 1
! 546:
! 547: /* glibc 2.1 and later finally define rlim_t */
! 548: #if !defined(__GLIBC__) || __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 1)
! 549: typedef int rlim_t;
! 550: #endif
! 551:
! 552: #elif defined(SCO)
! 553: #undef HAVE_GMTOFF
! 554: #undef NO_KILLPG
! 555: #undef NO_SETSID
! 556: #define NEED_INITGROUPS
! 557: #define NO_WRITEV
! 558: #include <sys/time.h>
! 559: #define HAVE_SYSLOG 1
! 560: #undef HAVE_SYS_RESOURCE_H
! 561:
! 562: #elif defined(SCO5)
! 563:
! 564: #define USE_FCNTL_SERIALIZED_ACCEPT
! 565: #define HAVE_MMAP 1
! 566: #define USE_MMAP_SCOREBOARD
! 567: #define USE_MMAP_FILES
! 568: #define SecureWare
! 569: #define HAVE_SYSLOG 1
! 570:
! 571: /* Although SCO 5 defines these in <strings.h> (note the "s") they don't have
! 572: consts. Sigh. */
! 573: extern int strcasecmp(const char *, const char *);
! 574: extern int strncasecmp(const char *, const char *, unsigned);
! 575:
! 576: #elif defined(AUX3)
! 577: /* These are to let -Wall compile more cleanly */
! 578: extern int strcasecmp(const char *, const char *);
! 579: extern int strncasecmp(const char *, const char *, unsigned);
! 580: extern int set42sig(), getopt(), getpeername(), bzero();
! 581: extern int listen(), bind(), socket(), getsockname();
! 582: extern int accept(), gethostname(), connect(), lstat();
! 583: extern int select(), killpg(), shutdown();
! 584: extern int initgroups(), setsockopt();
! 585: extern char *shmat();
! 586: extern int shmctl();
! 587: extern int shmget();
! 588: extern char *sbrk();
! 589: extern char *crypt();
! 590: #include <sys/time.h>
! 591: #undef HAVE_GMTOFF
! 592: #undef NO_KILLPG
! 593: #undef NO_SETSID
! 594: #define NEED_STRDUP
! 595: /* fcntl() locking is expensive with NFS */
! 596: #define USE_FLOCK_SERIALIZED_ACCEPT
! 597: #define SINGLE_LISTEN_UNSERIALIZED_ACCEPT
! 598: #define HAVE_SHMGET 1
! 599: #define USE_SHMGET_SCOREBOARD
! 600: /*
! 601: * NOTE: If when you run Apache under A/UX and you get a warning
! 602: * that httpd couldn't move break, then the below value for
! 603: * MOVEBREAK (64megs) is too large for your setup. Try reducing
! 604: * to 0x2000000 which is still PLENTY of space. I doubt if
! 605: * even on heavy systems sbrk() would be called at all...
! 606: */
! 607: #define MOVEBREAK 0x4000000
! 608: #define NO_LINGCLOSE
! 609: #define NO_SLACK
! 610: #define HAVE_SYSLOG 1
! 611: #undef HAVE_SYS_RESOURCE_H /* exists but does not provide *rlimit funcs */
! 612:
! 613: #elif defined(SVR4)
! 614: #define NO_KILLPG
! 615: #undef NO_SETSID
! 616: #undef NEED_STRDUP
! 617: #ifndef MPRAS
! 618: #define NEED_STRCASECMP
! 619: #ifndef ENCORE
! 620: #define NEED_STRNCASECMP
! 621: #endif /* ENCORE */
! 622: #endif /* MPRAS */
! 623: #define bzero(a,b) memset(a,0,b)
! 624: /* A lot of SVR4 systems need this */
! 625: #ifndef USE_SYSVSEM_SERIALIZED_ACCEPT
! 626: #define USE_FCNTL_SERIALIZED_ACCEPT
! 627: #endif
! 628: #define HAVE_SYSLOG 1
! 629: #define NET_SIZE_T size_t
! 630: #define HAVE_SHMGET 1
! 631: #define USE_SHMGET_SCOREBOARD
! 632: #ifdef _OSD_POSIX /* BS2000-POSIX mainframe needs initgroups */
! 633: #define NEED_HASHBANG_EMUL /* execve() doesn't start shell scripts by default */
! 634: #define _KMEMUSER /* Enable SHM_R/SHM_W defines in <shm.h> */
! 635: #undef NEED_STRCASECMP
! 636: #undef NEED_STRNCASECMP
! 637: #undef bzero
! 638: #endif /*_OSD_POSIX*/
! 639:
! 640: #elif defined(UW)
! 641: #if UW < 700
! 642: #define USE_FCNTL_SERIALIZED_ACCEPT
! 643: #define NO_LINGCLOSE
! 644: #define NO_KILLPG
! 645: #endif
! 646: #undef NO_SETSID
! 647: #undef NEED_STRDUP
! 648: #define NEED_STRCASECMP
! 649: #define NEED_STRNCASECMP
! 650: #define bzero(a,b) memset(a,0,b)
! 651: #define HAVE_MMAP 1
! 652: #define USE_MMAP_SCOREBOARD
! 653: #define USE_MMAP_FILES
! 654: #define HAVE_SHMGET 1
! 655: #undef USE_SHMGET_SCOREBOARD /* force use of mmap() scoreboard */
! 656: #include <sys/time.h>
! 657: #if UW >= 200
! 658: #define _POSIX_SOURCE
! 659: #endif
! 660: #define NET_SIZE_T size_t
! 661: #define HAVE_SYSLOG 1
! 662:
! 663: #elif defined(DGUX)
! 664: #define NO_KILLPG
! 665: #undef NO_SETSID
! 666: #undef NEED_STRDUP
! 667: #ifdef _IX86_DG
! 668: #undef NEED_STRCASECMP
! 669: #undef NEED_STRNCASECMP
! 670: #else
! 671: #define NEED_STRCASECMP
! 672: #define NEED_STRNCASECMP
! 673: #endif
! 674: #define bzero(a,b) memset(a,0,b)
! 675: /* A lot of SVR4 systems need this */
! 676: #define USE_FCNTL_SERIALIZED_ACCEPT
! 677: #define ap_inet_addr inet_network
! 678: #define HAVE_SYSLOG 1
! 679:
! 680: #elif defined(__NetBSD__) || defined(__OpenBSD__) || defined(NETBSD)
! 681: #define HAVE_GMTOFF 1
! 682: #undef NO_KILLPG
! 683: #undef NO_SETSID
! 684: #define HAVE_SYSLOG 1
! 685: #ifndef DEFAULT_USER
! 686: #define DEFAULT_USER "nobody"
! 687: #endif
! 688: #ifndef DEFAULT_GROUP
! 689: #define DEFAULT_GROUP "nogroup"
! 690: #endif
! 691: #define HAVE_SHMGET 1
! 692: #define HAVE_MMAP 1
! 693: #define USE_MMAP_SCOREBOARD
! 694: #define USE_MMAP_FILES
! 695: #define USE_FLOCK_SERIALIZED_ACCEPT
! 696: #define SINGLE_LISTEN_UNSERIALIZED_ACCEPT
! 697:
! 698: #elif defined(UTS21)
! 699: #undef HAVE_GMTOFF
! 700: #undef NO_KILLPG
! 701: #define NO_SETSID
! 702: #define NEED_WAITPID
! 703: #define STDIN_FILENO 0
! 704: #define STDOUT_FILENO 1
! 705: #define STDERR_FILENO 2
! 706: #define HAVE_SYSLOG 1
! 707: #define USE_LONGJMP
! 708: #define JMP_BUF jmp_buf
! 709: #define NO_USE_SIGACTION
! 710: #define NEED_STRERROR
! 711: #define NEED_STRSTR
! 712: #define NEED_HASHBANG_EMUL
! 713: #define NDELAY_PIPE_RETURNS_ZERO
! 714: #define NO_DATA NO_ADDRESS
! 715: #define ap_wait_t union wait
! 716: #define WEXITSTATUS(status) (int)((status).w_retcode)
! 717: #define WTERMSIG(status) (int)((status).w_termsig)
! 718: #define strftime(buf,bufsize,fmt,tm) ascftime(buf,fmt,tm)
! 719: #undef HAVE_SYS_RESOURCE_H /* exists but does not provide *rlimit funcs */
! 720: #include <sys/types.h>
! 721: #include <sys/time.h>
! 722:
! 723: #elif defined(APOLLO)
! 724: #undef HAVE_GMTOFF
! 725: #undef NO_KILLPG
! 726: #undef NO_SETSID
! 727: #define HAVE_SYSLOG 1
! 728:
! 729: #elif defined(__FreeBSD__) || defined(__bsdi__)
! 730: #if defined(__FreeBSD__)
! 731: #include <osreldate.h>
! 732: #endif
! 733: #define HAVE_GMTOFF 1
! 734: #undef NO_KILLPG
! 735: #undef NO_SETSID
! 736: #define HAVE_MMAP 1
! 737: #define USE_MMAP_SCOREBOARD
! 738: #define USE_MMAP_FILES
! 739: #ifndef DEFAULT_USER
! 740: #define DEFAULT_USER "nobody"
! 741: #endif
! 742: #ifndef DEFAULT_GROUP
! 743: #define DEFAULT_GROUP "nogroup"
! 744: #endif
! 745: #if defined(__bsdi__) || \
! 746: (defined(__FreeBSD_version) && (__FreeBSD_version < 220000))
! 747: typedef quad_t rlim_t;
! 748: #endif
! 749: #define USE_FLOCK_SERIALIZED_ACCEPT
! 750: #define SINGLE_LISTEN_UNSERIALIZED_ACCEPT
! 751: #define HAVE_SYSLOG 1
! 752: #define SYS_SIGLIST sys_siglist
! 753: #if (defined(__FreeBSD_version) && (__FreeBSD_version >= 400000))
! 754: #define NET_SIZE_T socklen_t
! 755: #endif
! 756:
! 757: #elif defined(QNX)
! 758: #ifndef crypt
! 759: char *crypt(const char *pw, const char *salt);
! 760: #endif
! 761: #ifndef initgroups
! 762: int initgroups(char *, int);
! 763: #endif
! 764: #ifndef strncasecmp
! 765: #define strncasecmp strnicmp
! 766: #endif
! 767: #undef NO_KILLPG
! 768: #undef NO_SETSID
! 769: #define NEED_INITGROUPS
! 770: #define NEED_SELECT_H
! 771: #define NEED_PROCESS_H
! 772: #include <unix.h>
! 773: #define HAVE_MMAP 1
! 774: #define USE_POSIX_SCOREBOARD
! 775: #define USE_FLOCK_SERIALIZED_ACCEPT
! 776: #define SINGLE_LISTEN_UNSERIALIZED_ACCEPT
! 777: #define HAVE_SYSLOG 1
! 778:
! 779: #elif defined(LYNXOS)
! 780: #undef HAVE_GMTOFF
! 781: #undef USE_MMAP_SCOREBOARD
! 782: #undef USE_SHMGET_SCOREBOARD
! 783: #undef USE_FCNTL_SERIALIZED_ACCEPT
! 784: #undef USE_FLOCK_SERIALIZED_ACCEPT
! 785: #define USE_LONGJMP
! 786: #undef NO_KILLPG
! 787: #undef NO_SETSID
! 788: #undef NO_USE_SIGACTION
! 789: #undef NO_LINGCLOSE
! 790: extern char *crypt(char *pw, char *salt);
! 791: typedef int rlim_t;
! 792: #define HAVE_SYSLOG 1
! 793:
! 794: #elif defined(UXPDS)
! 795: #undef NEED_STRCASECMP
! 796: #undef NEED_STRNCASECMP
! 797: #undef NEED_STRDUP
! 798: #undef HAVE_GMTOFF
! 799: #define NO_KILLPG
! 800: #undef NO_SETSID
! 801: #define bzero(a,b) memset(a,0,b)
! 802: #define USE_FCNTL_SERIALIZED_ACCEPT
! 803: #define HAVE_MMAP 1
! 804: #define USE_MMAP_SCOREBOARD
! 805: #define USE_MMAP_FILES
! 806: #define HAVE_SYSLOG 1
! 807:
! 808: #elif defined(OS2)
! 809: /* Defines required for EMX OS/2 port. */
! 810: #define NO_KILLPG
! 811: #define NEED_STRCASECMP
! 812: #define NEED_STRNCASECMP
! 813: #define NEED_PROCESS_H
! 814: #define NO_SETSID
! 815: #define NO_TIMES
! 816: #define CASE_BLIND_FILESYSTEM
! 817: /* Add some drive name support */
! 818: #define chdir _chdir2
! 819: #include <sys/time.h>
! 820: #define MAXSOCKETS 2048
! 821: #define USE_OS2_SCOREBOARD
! 822: #define NO_RELIABLE_PIPED_LOGS
! 823: #define USE_OS2SEM_SERIALIZED_ACCEPT
! 824: #define SINGLE_LISTEN_UNSERIALIZED_ACCEPT
! 825: #define NO_SLACK
! 826: #define FOPEN_REQUIRES_T
! 827:
! 828: #elif defined(__MACHTEN__)
! 829: typedef int rlim_t;
! 830: #undef NO_KILLPG
! 831: #define NO_SETSID
! 832: #define HAVE_GMTOFF 1
! 833: #ifndef __MACHTEN_PPC__
! 834: #ifndef __MACHTEN_68K__
! 835: #define __MACHTEN_68K__
! 836: #endif
! 837: #define USE_FLOCK_SERIALIZED_ACCEPT
! 838: #define NO_USE_SIGACTION
! 839: #define JMP_BUF sigjmp_buf
! 840: #define USE_LONGJMP
! 841: #undef NEED_STRDUP
! 842: #else
! 843: #define HAVE_SHMGET 1
! 844: #define USE_SHMGET_SCOREBOARD
! 845: #define USE_FCNTL_SERIALIZED_ACCEPT
! 846: #endif
! 847:
! 848: /* Convex OS v11 */
! 849: #elif defined(CONVEXOS11)
! 850: #undef HAVE_GMTOFF
! 851: #undef NO_KILLPG
! 852: #undef NO_SETSID
! 853: #undef NEED_STRDUP
! 854: #define HAVE_MMAP 1
! 855: #define USE_MMAP_SCOREBOARD
! 856: #define USE_MMAP_FILES
! 857: #define HAVE_SYSLOG 1
! 858:
! 859: #define NO_TIMEZONE
! 860: #include <stdio.h>
! 861: #include <sys/types.h>
! 862: typedef int rlim_t;
! 863:
! 864: #elif defined(ISC)
! 865: #include <net/errno.h>
! 866: #define NO_KILLPG
! 867: #undef NO_SETSID
! 868: #define HAVE_SHMGET 1
! 869: #define USE_SHMGET_SCOREBOARD
! 870: #define USE_FCNTL_SERIALIZED_ACCEPT
! 871: #define HAVE_SYSLOG 1
! 872:
! 873: #elif defined(NEWSOS)
! 874: #define HAVE_SHMGET 1
! 875: #define USE_SHMGET_SCOREBOARD
! 876: #define USE_LONGJMP
! 877: #define NO_SETSID
! 878: #define NO_USE_SIGACTION
! 879: #define NEED_WAITPID
! 880: #define NO_OTHER_CHILD
! 881: #define HAVE_SYSLOG 1
! 882: #include <sys/time.h>
! 883: #include <stdlib.h>
! 884: #include <sys/types.h>
! 885: typedef int pid_t;
! 886: typedef int rlim_t;
! 887: typedef int mode_t;
! 888:
! 889: #elif defined(RISCIX)
! 890: #include <sys/time.h>
! 891: typedef int rlim_t;
! 892: #define NO_USE_SIGACTION
! 893: #define USE_LONGJMP
! 894: #define NEED_STRCASECMP
! 895: #define NEED_STRNCASECMP
! 896: #define NEED_STRDUP
! 897:
! 898: #elif defined(BEOS)
! 899: #undef PLATFORM
! 900: #define PLATFORM "BeOS"
! 901: #include <stddef.h>
! 902:
! 903: #define NO_WRITEV
! 904: #define NO_KILLPG
! 905: #define NEED_INITGROUPS
! 906: #define PF_INET AF_INET
! 907: #define S_IEXEC S_IXUSR
! 908:
! 909: #elif defined(_CX_SX)
! 910: #define JMP_BUF sigjmp_buf
! 911: #include <sys/types.h>
! 912: #include <sys/time.h>
! 913:
! 914: #elif defined(WIN32)
! 915:
! 916: /* All windows stuff is now in os/win32/os.h */
! 917:
! 918: #elif defined(TPF) /* IBM Transaction Processing Facility operating system */
! 919:
! 920: #include <tpfeq.h>
! 921: #include <tpfio.h>
! 922: #include <sysapi.h>
! 923: #include <sysgtime.h>
! 924: #define PRIMECRAS 0x010000
! 925: #define JMP_BUF jmp_buf
! 926: #define HAVE_SHMGET
! 927: #undef HAVE_SYS_RESOURCE_H
! 928: #define NEED_INITGROUPS
! 929: #define NEED_SIGNAL_INTERRUPT
! 930: #include <strings.h>
! 931: #ifndef __strings_h
! 932: #define NEED_STRCASECMP
! 933: #define NEED_STRNCASECMP
! 934: #endif
! 935: #define NEED_STRDUP
! 936: #define NO_DBM_REWRITEMAP
! 937: #define NO_GETTIMEOFDAY
! 938: #define NO_KILLPG
! 939: #define NO_LINGCLOSE
! 940: #define NO_MMAP
! 941: #define NO_OTHER_CHILD
! 942: #define NO_PIPED_LOGS
! 943: #define NO_RELIABLE_PIPED_LOGS
! 944: #define NO_SETSID
! 945: #define NO_SLACK
! 946: #define NO_TIMES
! 947: #define NO_USE_SIGACTION
! 948: #define USE_LONGJMP
! 949: /*#define USE_SHMGET_SCOREBOARD*/
! 950: #define USE_TPF_ACCEPT
! 951: #define USE_TPF_CORE_SERIALIZED_ACCEPT
! 952: /*#define USE_TPF_DAEMON*/
! 953: #define USE_TPF_SCOREBOARD
! 954: #define USE_TPF_SELECT
! 955: #define S_IREAD S_IRUSR
! 956: #define S_IWRITE S_IWUSR
! 957: #define S_IEXEC S_IXUSR
! 958: #define crypt(buf,salt) ((char *)buf)
! 959: #undef offsetof
! 960: #define offsetof(s_type,field) ((size_t)&(((s_type*)0)->field))
! 961:
! 962: #elif defined(__TANDEM)
! 963: #define NO_WRITEV
! 964: #define NO_KILLPG
! 965: #define NEED_INITGROUPS
! 966: #define NO_SLACK
! 967:
! 968: #elif defined(OS390) /* IBM OS/390 Operating System */
! 969: #define HAVE_MMAP
! 970: #define HAVE_SHMGET
! 971: #define USE_SHMGET_SCOREBOARD
! 972: #define USE_MMAP_FILES
! 973: #define NEED_UNION_SEMUN
! 974: #define USE_SYSVSEM_SERIALIZED_ACCEPT
! 975: #define _POSIX_SOURCE
! 976: #include <signal.h>
! 977: #ifdef SIGDUMP /* SIGDUMP is not defined by OS/390 v1r2 */
! 978: #define NSIG SIGDUMP+1
! 979: #else
! 980: #define NSIG 40
! 981: #endif
! 982: #define JMP_BUF sigjmp_buf
! 983: #define _XOPEN_SOURCE_EXTENDED 1
! 984: #define _OPEN_MSGQ_EXT
! 985: #define _XOPEN_SOURCE
! 986: #define SHM_R S_IRUSR
! 987: #define SHM_W S_IWUSR
! 988: #include <sys/time.h>
! 989: #include <sys/types.h>
! 990: #include <sys/msg.h>
! 991: #include <sys/socket.h>
! 992: #define NET_SIZE_T size_t
! 993: #define NEED_HASHBANG_EMUL
! 994:
! 995: #else
! 996: /* Unknown system - Edit these to match */
! 997: #ifdef BSD
! 998: #define HAVE_GMTOFF 1
! 999: #else
! 1000: #undef HAVE_GMTOFF
! 1001: #endif
! 1002: /* NO_KILLPG is set on systems that don't have killpg */
! 1003: #undef NO_KILLPG
! 1004: /* NO_SETSID is set on systems that don't have setsid */
! 1005: #undef NO_SETSID
! 1006: /* NEED_STRDUP is set on stupid systems that don't have strdup. */
! 1007: #undef NEED_STRDUP
! 1008: #endif
! 1009:
! 1010: #ifdef HAVE_SYS_PARAM_H
! 1011: #include <sys/param.h>
! 1012: #endif /* HAVE_SYS_PARAM_H */
! 1013:
! 1014: /* stuff marked API_EXPORT is part of the API, and intended for use
! 1015: * by modules
! 1016: */
! 1017: #ifndef API_EXPORT
! 1018: #define API_EXPORT(type) type
! 1019: #endif
! 1020:
! 1021: /* Stuff marked API_EXPORT_NONSTD is part of the API, and intended for
! 1022: * use by modules. The difference between API_EXPORT and
! 1023: * API_EXPORT_NONSTD is that the latter is required for any functions
! 1024: * which use varargs or are used via indirect function call. This
! 1025: * is to accomodate the two calling conventions in windows dlls.
! 1026: */
! 1027: #ifndef API_EXPORT_NONSTD
! 1028: #define API_EXPORT_NONSTD(type) type
! 1029: #endif
! 1030:
! 1031: #ifndef MODULE_VAR_EXPORT
! 1032: #define MODULE_VAR_EXPORT
! 1033: #endif
! 1034: #ifndef API_VAR_EXPORT
! 1035: #define API_VAR_EXPORT
! 1036: #endif
! 1037:
! 1038: /* modules should not used functions marked CORE_EXPORT
! 1039: * or CORE_EXPORT_NONSTD */
! 1040: #ifndef CORE_EXPORT
! 1041: #define CORE_EXPORT API_EXPORT
! 1042: #endif
! 1043: #ifndef CORE_EXPORT_NONSTD
! 1044: #define CORE_EXPORT_NONSTD API_EXPORT_NONSTD
! 1045: #endif
! 1046:
! 1047: /* On Darwin, symbols that conflict with loaded dylibs
! 1048: * (eg. System framework) need to be declared as private symbols with
! 1049: * __private_extern__.
! 1050: * For other systems, make that a no-op.
! 1051: */
! 1052: #if defined(DARWIN) && defined(__DYNAMIC__)
! 1053: #define ap_private_extern __private_extern__
! 1054: #else
! 1055: #define ap_private_extern
! 1056: #endif
! 1057:
! 1058: /*
! 1059: * The particular directory style your system supports. If you have dirent.h
! 1060: * in /usr/include (POSIX) or /usr/include/sys (SYSV), #include
! 1061: * that file and define DIR_TYPE to be dirent. Otherwise, if you have
! 1062: * /usr/include/sys/dir.h, define DIR_TYPE to be direct and include that
! 1063: * file. If you have neither, I'm confused.
! 1064: */
! 1065:
! 1066: #ifndef NETWARE
! 1067: #include <sys/types.h>
! 1068: #endif
! 1069: #include <stdarg.h>
! 1070:
! 1071: #if !defined(NEXT) && !defined(WIN32)
! 1072: #include <dirent.h>
! 1073: #define DIR_TYPE dirent
! 1074: #elif !defined(WIN32)
! 1075: #include <sys/dir.h>
! 1076: #define DIR_TYPE direct
! 1077: #else
! 1078: #define DIR_TYPE dirent
! 1079: #endif
! 1080:
! 1081: #include <stdio.h>
! 1082: #include <stdlib.h>
! 1083: #include <string.h>
! 1084: #ifdef __TANDEM
! 1085: #include <strings.h>
! 1086: #endif
! 1087: #include "ap_ctype.h"
! 1088: #if !defined(MPE) && !defined(WIN32) && !defined(TPF) && !defined(__TANDEM) && !defined(NETWARE)
! 1089: #include <sys/file.h>
! 1090: #endif
! 1091: #if !defined(WIN32) && !defined(NETWARE)
! 1092: #include <sys/socket.h>
! 1093: #ifdef HAVE_SYS_SELECT_H
! 1094: #include <sys/select.h>
! 1095: #endif /* HAVE_SYS_SELECT_H */
! 1096: #ifndef TPF
! 1097: #include <netinet/in.h>
! 1098: #endif /* TPF */
! 1099: #if defined(OS390) && !defined(NO_ADDRESS)
! 1100: #define NO_ADDRESS NO_DATA /* Not defined properly by OS/390 v1r2 */
! 1101: #endif
! 1102: #include <netdb.h>
! 1103: #include <sys/ioctl.h>
! 1104: #if !defined(MPE) && !defined(BEOS) && !defined(TPF)
! 1105: #include <arpa/inet.h> /* for inet_ntoa */
! 1106: #endif
! 1107: #include <sys/wait.h>
! 1108: #include <pwd.h>
! 1109: #include <grp.h>
! 1110: #include <fcntl.h>
! 1111: #ifndef BEOS
! 1112: #define closesocket(s) close(s)
! 1113: #endif
! 1114: #ifndef O_BINARY
! 1115: #define O_BINARY (0)
! 1116: #endif
! 1117: #endif /* ndef WIN32 */
! 1118:
! 1119: #include <limits.h>
! 1120: #include <time.h> /* for ctime */
! 1121: #ifdef WIN32
! 1122: #define strftime(s,max,format,tm) os_strftime(s,max,format,tm)
! 1123: #endif
! 1124: #include <signal.h>
! 1125: #ifdef NETWARE
! 1126: #undef SIGKILL
! 1127: #undef SA_NOCLDSTOP
! 1128: #undef SIGALRM
! 1129: #undef SIGCHILD
! 1130: #undef SIGCONT
! 1131: #undef SIGHUP
! 1132: #undef SIGPIPE
! 1133: #undef SIGQUIT
! 1134: #undef SIGSTOP
! 1135: #undef SIGTSTP
! 1136: #undef SIGTTIN
! 1137: #undef SIGTTOU
! 1138: #undef SIGUSR1
! 1139: #undef SIGUSR2
! 1140: #undef SIG_BLOCK
! 1141: #undef SIG_SETMASK
! 1142: #undef SIG_UNBLOCK
! 1143: #endif
! 1144: #if defined(TPF) && defined(NSIG)
! 1145: #undef NSIG
! 1146: #endif
! 1147: #include <errno.h>
! 1148: #if !defined(QNX) && !defined(CONVEXOS11) && !defined(NEXT) && !defined(TPF) && !defined(NETWARE) && !defined(MPE)
! 1149: #include <memory.h>
! 1150: #endif
! 1151:
! 1152: #ifdef NEED_PROCESS_H
! 1153: #include <process.h>
! 1154: #endif
! 1155:
! 1156: #ifdef WIN32
! 1157: #include "../include/hsregex.h"
! 1158: #elif defined(USE_HSREGEX)
! 1159: #include "hsregex.h"
! 1160: #else
! 1161: #include <regex.h>
! 1162: #endif
! 1163:
! 1164: #ifdef HAVE_SYS_RESOURCE_H
! 1165: #include <sys/resource.h>
! 1166: #ifdef SUNOS4
! 1167: int getrlimit(int, struct rlimit *);
! 1168: int setrlimit(int, struct rlimit *);
! 1169: #endif
! 1170: #endif
! 1171: #ifdef USE_MMAP_SCOREBOARD
! 1172: #if !defined(OS2) && !defined(WIN32)
! 1173: /* This file is not needed for OS/2 */
! 1174: #include <sys/mman.h>
! 1175: #endif
! 1176: #endif
! 1177: #if !defined(MAP_ANON) && defined(MAP_ANONYMOUS)
! 1178: #define MAP_ANON MAP_ANONYMOUS
! 1179: #endif
! 1180:
! 1181: #if defined(USE_MMAP_FILES) && (defined(NO_MMAP) || !defined(HAVE_MMAP))
! 1182: #undef USE_MMAP_FILES
! 1183: #endif
! 1184:
! 1185: #if defined(USE_MMAP_SCOREBOARD) && (defined(NO_MMAP) || !defined(HAVE_MMAP))
! 1186: #undef USE_MMAP_SCOREBOARD
! 1187: #endif
! 1188:
! 1189: #if defined(USE_SHMGET_SCOREBOARD) && (defined(NO_SHMGET) || !defined(HAVE_SHMGET))
! 1190: #undef USE_SHMGET_SCOREBOARD
! 1191: #endif
! 1192:
! 1193: #ifndef LOGNAME_MAX
! 1194: #define LOGNAME_MAX 25
! 1195: #endif
! 1196:
! 1197: #ifdef HAVE_UNISTD_H
! 1198: #include <unistd.h>
! 1199: #endif
! 1200:
! 1201: #ifdef ultrix
! 1202: #define ULTRIX_BRAIN_DEATH
! 1203: #endif
! 1204:
! 1205: #ifndef S_ISLNK
! 1206: #define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
! 1207: #endif
! 1208:
! 1209: #ifndef INADDR_NONE
! 1210: #define INADDR_NONE ((unsigned long) -1)
! 1211: #endif
! 1212:
! 1213: /*
! 1214: * Replace signal function with sigaction equivalent
! 1215: */
! 1216: #ifndef NO_USE_SIGACTION
! 1217: typedef void Sigfunc(int);
! 1218:
! 1219: #if defined(SIG_IGN) && !defined(SIG_ERR)
! 1220: #define SIG_ERR ((Sigfunc *)-1)
! 1221: #endif
! 1222:
! 1223: /*
! 1224: * For some strange reason, QNX defines signal to signal. Eliminate it.
! 1225: */
! 1226: #ifdef signal
! 1227: #undef signal
! 1228: #endif
! 1229: #define signal(s,f) ap_signal(s,f)
! 1230: Sigfunc *signal(int signo, Sigfunc * func);
! 1231: #endif
! 1232:
! 1233: #include <setjmp.h>
! 1234:
! 1235: #if defined(USE_LONGJMP)
! 1236: #define ap_longjmp(x, y) longjmp((x), (y))
! 1237: #define ap_setjmp(x) setjmp(x)
! 1238: #ifndef JMP_BUF
! 1239: #define JMP_BUF jmp_buf
! 1240: #endif
! 1241: #else
! 1242: #define ap_longjmp(x, y) siglongjmp((x), (y))
! 1243: #define ap_setjmp(x) sigsetjmp((x), 1)
! 1244: #ifndef JMP_BUF
! 1245: #define JMP_BUF sigjmp_buf
! 1246: #endif
! 1247: #endif
! 1248:
! 1249: /* Majority of os's want to verify FD_SETSIZE */
! 1250: #if !defined(WIN32) && !defined(TPF) && !defined(NETWARE)
! 1251: #define CHECK_FD_SETSIZE
! 1252: #endif
! 1253:
! 1254: #ifdef USE_TPF_SELECT
! 1255: #define ap_select(_a, _b, _c, _d, _e) \
! 1256: tpf_select(_a, _b, _c, _d, _e)
! 1257: #elif defined(SELECT_NEEDS_CAST)
! 1258: #define ap_select(_a, _b, _c, _d, _e) \
! 1259: select((_a), (int *)(_b), (int *)(_c), (int *)(_d), (_e))
! 1260: #else
! 1261: #define ap_select(_a, _b, _c, _d, _e) \
! 1262: select(_a, _b, _c, _d, _e)
! 1263: #endif
! 1264:
! 1265: #ifdef USE_TPF_ACCEPT
! 1266: #define ap_accept(_fd, _sa, _ln) tpf_accept(_fd, _sa, _ln)
! 1267: #else
! 1268: #define ap_accept(_fd, _sa, _ln) accept(_fd, _sa, _ln)
! 1269: #endif
! 1270:
! 1271: #ifdef NEED_SIGNAL_INTERRUPT
! 1272: #define ap_check_signals() tpf_process_signals()
! 1273: #else
! 1274: #define ap_check_signals()
! 1275: #endif
! 1276:
! 1277: #ifdef ULTRIX_BRAIN_DEATH
! 1278: #define ap_fdopen(d,m) fdopen((d), (char *)(m))
! 1279: #else
! 1280: #define ap_fdopen(d,m) fdopen((d), (m))
! 1281: #endif
! 1282:
! 1283: #ifndef ap_inet_addr
! 1284: #define ap_inet_addr inet_addr
! 1285: #endif
! 1286:
! 1287: #ifdef NO_OTHER_CHILD
! 1288: #define NO_RELIABLE_PIPED_LOGS
! 1289: #endif
! 1290:
! 1291: /* When the underlying OS doesn't support exec() of scripts which start
! 1292: * with a HASHBANG (#!) followed by interpreter name and args, define this.
! 1293: */
! 1294: #ifdef NEED_HASHBANG_EMUL
! 1295: extern int ap_execle(const char *filename, const char *arg,...);
! 1296: extern int ap_execve(const char *filename, char * const argv[],
! 1297: char * const envp[]);
! 1298: /* ap_execle() is a wrapper function around ap_execve(). */
! 1299: #define execle ap_execle
! 1300: #define execve(path,argv,envp) ap_execve(path,argv,envp)
! 1301: #endif
! 1302:
! 1303: /* Finding offsets of elements within structures.
! 1304: * Taken from the X code... they've sweated portability of this stuff
! 1305: * so we don't have to. Sigh...
! 1306: */
! 1307:
! 1308: #if defined(CRAY) || (defined(__arm) && !defined(LINUX))
! 1309: #ifdef __STDC__
! 1310: #define XtOffset(p_type,field) _Offsetof(p_type,field)
! 1311: #else
! 1312: #ifdef CRAY2
! 1313: #define XtOffset(p_type,field) \
! 1314: (sizeof(int)*((unsigned int)&(((p_type)NULL)->field)))
! 1315:
! 1316: #else /* !CRAY2 */
! 1317:
! 1318: #define XtOffset(p_type,field) ((unsigned int)&(((p_type)NULL)->field))
! 1319:
! 1320: #endif /* !CRAY2 */
! 1321: #endif /* __STDC__ */
! 1322: #else /* ! (CRAY || __arm) */
! 1323:
! 1324: #define XtOffset(p_type,field) \
! 1325: ((long) (((char *) (&(((p_type)NULL)->field))) - ((char *) NULL)))
! 1326:
! 1327: #endif /* !CRAY */
! 1328:
! 1329: #ifdef offsetof
! 1330: #define XtOffsetOf(s_type,field) offsetof(s_type,field)
! 1331: #else
! 1332: #define XtOffsetOf(s_type,field) XtOffset(s_type*,field)
! 1333: #endif
! 1334:
! 1335: /*
! 1336: * NET_SIZE_T exists because of shortsightedness on the POSIX committee. BSD
! 1337: * systems used "int *" as the parameter to accept(), getsockname(),
! 1338: * getpeername() et al. Consequently many unixes took an int * for that
! 1339: * parameter. The POSIX committee decided that "int" was just too generic and
! 1340: * had to be replaced with size_t almost everywhere. There's no problem with
! 1341: * that when you're passing by value. But when you're passing by reference
! 1342: * this creates a gross source incompatibility with existing programs. On
! 1343: * 32-bit architectures it creates only a warning. On 64-bit architectures it
! 1344: * creates broken code -- because "int *" is a pointer to a 64-bit quantity and
! 1345: * "size_t *" is frequently a pointer to a 32-bit quantity.
! 1346: *
! 1347: * Some Unixes adopted "size_t *" for the sake of POSIX compliance. Others
! 1348: * ignored it because it was such a broken interface. Chaos ensued. POSIX
! 1349: * finally woke up and decided that it was wrong and created a new type
! 1350: * socklen_t. The only useful value for socklen_t is int, and that's how
! 1351: * everyone who has a clue implements it. It is almost always the case that
! 1352: * NET_SIZE_T should be defined to be an int, unless the system being compiled
! 1353: * for was created in the window of POSIX madness.
! 1354: */
! 1355: #ifndef NET_SIZE_T
! 1356: #define NET_SIZE_T int
! 1357: #endif
! 1358:
! 1359: /* Linux defines __WCOREDUMP, but doesn't define WCOREDUMP unless __USE_BSD
! 1360: * is in use... we'd prefer to just use WCOREDUMP everywhere.
! 1361: */
! 1362: #if defined(__WCOREDUMP) && !defined(WCOREDUMP)
! 1363: #define WCOREDUMP __WCOREDUMP
! 1364: #endif
! 1365:
! 1366: #ifdef SUNOS_LIB_PROTOTYPES
! 1367: /* Prototypes needed to get a clean compile with gcc -Wall.
! 1368: * Believe it or not, these do have to be declared, at least on SunOS,
! 1369: * because they aren't mentioned in the relevant system headers.
! 1370: * Sun Quality Software. Gotta love it. This section is not
! 1371: * currently (13Nov97) used.
! 1372: */
! 1373:
! 1374: int getopt(int, char **, char *);
! 1375:
! 1376: int strcasecmp(const char *, const char *);
! 1377: int strncasecmp(const char *, const char *, int);
! 1378: int toupper(int);
! 1379: int tolower(int);
! 1380:
! 1381: int printf(char *,...);
! 1382: int fprintf(FILE *, char *,...);
! 1383: int fputs(char *, FILE *);
! 1384: int fread(char *, int, int, FILE *);
! 1385: int fwrite(char *, int, int, FILE *);
! 1386: int fgetc(FILE *);
! 1387: char *fgets(char *s, int, FILE*);
! 1388: int fflush(FILE *);
! 1389: int fclose(FILE *);
! 1390: int ungetc(int, FILE *);
! 1391: int _filbuf(FILE *); /* !!! */
! 1392: int _flsbuf(unsigned char, FILE *); /* !!! */
! 1393: int sscanf(char *, char *,...);
! 1394: void setbuf(FILE *, char *);
! 1395: void perror(char *);
! 1396:
! 1397: time_t time(time_t *);
! 1398: int strftime(char *, int, const char *, struct tm *);
! 1399:
! 1400: int initgroups(char *, int);
! 1401: int wait3(int *, int, void *); /* Close enough for us... */
! 1402: int lstat(const char *, struct stat *);
! 1403: int stat(const char *, struct stat *);
! 1404: int flock(int, int);
! 1405: #ifndef NO_KILLPG
! 1406: int killpg(int, int);
! 1407: #endif
! 1408: int socket(int, int, int);
! 1409: int setsockopt(int, int, int, const char *, int);
! 1410: int listen(int, int);
! 1411: int bind(int, struct sockaddr *, int);
! 1412: int connect(int, struct sockaddr *, int);
! 1413: int accept(int, struct sockaddr *, int *);
! 1414: int shutdown(int, int);
! 1415:
! 1416: int getsockname(int s, struct sockaddr *name, int *namelen);
! 1417: int getpeername(int s, struct sockaddr *name, int *namelen);
! 1418: int gethostname(char *name, int namelen);
! 1419: void syslog(int, char *,...);
! 1420: char *mktemp(char *);
! 1421:
! 1422: int vfprintf(FILE *, const char *, va_list);
! 1423:
! 1424: #endif /* SUNOS_LIB_PROTOTYPES */
! 1425:
! 1426: /* The assumption is that when the functions are missing,
! 1427: * then there's no matching prototype available either.
! 1428: * Declare what is needed exactly as the replacement routines implement it.
! 1429: */
! 1430: #ifdef NEED_STRDUP
! 1431: extern char *strdup (const char *str);
! 1432: #endif
! 1433: #ifdef NEED_STRCASECMP
! 1434: extern int strcasecmp (const char *a, const char *b);
! 1435: #endif
! 1436: #ifdef NEED_STRNCASECMP
! 1437: extern int strncasecmp (const char *a, const char *b, int n);
! 1438: #endif
! 1439: #ifdef NEED_INITGROUPS
! 1440: extern int initgroups(const char *name, gid_t basegid);
! 1441: #endif
! 1442: #ifdef NEED_WAITPID
! 1443: extern int waitpid(pid_t pid, int *statusp, int options);
! 1444: #endif
! 1445: #ifdef NEED_STRERROR
! 1446: extern char *strerror (int err);
! 1447: #endif
! 1448: #ifdef NEED_DIFFTIME
! 1449: extern double difftime(time_t time1, time_t time0);
! 1450: #endif
! 1451:
! 1452: #ifndef ap_wait_t
! 1453: #define ap_wait_t int
! 1454: #endif
! 1455:
! 1456: #ifdef __cplusplus
! 1457: }
! 1458: #endif
! 1459:
! 1460: #endif /* !AP_CONFIG_H */
E-mail: