1/* $NetBSD: sys_defs.h,v 1.14 2023/12/23 20:30:46 christos Exp $ */ 2 3#ifndef _SYS_DEFS_H_INCLUDED_ 4#define _SYS_DEFS_H_INCLUDED_ 5 6/*++ 7/* NAME 8/* sys_defs 3h 9/* SUMMARY 10/* portability header 11/* SYNOPSIS 12/* #include <sys_defs.h> 13/* DESCRIPTION 14/* .nf 15 16 /* 17 * Specific platforms. Major release numbers differ for a good reason. So be 18 * a good girl, plan for the future, and at least include the major release 19 * number in the system type (for example, SUNOS5 or FREEBSD2). The system 20 * type is determined by the makedefs shell script in the top-level 21 * directory. Adding support for a new system type means updating the 22 * makedefs script, and adding a section below for the new system. 23 */ 24#ifdef SUNOS5 25#define _SVID_GETTOD /* Solaris 2.5, XSH4.2 versus SVID */ 26#endif 27#include <sys/types.h> 28 29 /* 30 * 4.4BSD and close derivatives. 31 */ 32#if defined(FREEBSD2) || defined(FREEBSD3) || defined(FREEBSD4) \ 33 || defined(FREEBSD5) || defined(FREEBSD6) || defined(FREEBSD7) \ 34 || defined(FREEBSD8) || defined(FREEBSD9) || defined(FREEBSD10) \ 35 || defined(FREEBSD11) || defined(FREEBSD12) || defined(FREEBSD13) \ 36 || defined(FREEBSD14) \ 37 || defined(BSDI2) || defined(BSDI3) || defined(BSDI4) \ 38 || defined(OPENBSD2) || defined(OPENBSD3) || defined(OPENBSD4) \ 39 || defined(OPENBSD5) || defined(OPENBSD6) || defined(OPENBSD7) \ 40 || defined(NETBSD1) || defined(NETBSD2) || defined(NETBSD3) \ 41 || defined(NETBSD4) || defined(NETBSD5) || defined(NETBSD6) \ 42 || defined(NETBSD7) | defined(NETBSD8) || defined(NETBSD9) \ 43 || defined(NETBSD10) \ 44 || defined(EKKOBSD1) || defined(DRAGONFLY) 45#define SUPPORTED 46#include <sys/param.h> 47#define UINT32_TYPE unsigned int 48#define UINT16_TYPE unsigned short 49#define USE_PATHS_H 50#define HAS_FLOCK_LOCK 51#define HAS_FCNTL_LOCK 52#define INTERNAL_LOCK MYFLOCK_STYLE_FLOCK 53#define DEF_MAILBOX_LOCK "flock, dotlock" 54#define HAS_SUN_LEN 55#define HAS_FSYNC 56#define HAS_DB 57#define HAS_SA_LEN 58#define NATIVE_DB_TYPE "hash" 59#if (defined(__NetBSD_Version__) && __NetBSD_Version__ >= 104250000) 60#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/mail/aliases" /* sendmail 8.10 */ 61#endif 62#if (defined(OpenBSD) && OpenBSD >= 200006) 63#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/mail/aliases" /* OpenBSD 2.7 */ 64#endif 65#ifndef ALIAS_DB_MAP 66#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/aliases" 67#endif 68#define GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *) 0) 69#define ROOT_PATH "/bin:/usr/bin:/sbin:/usr/sbin" 70#if (defined(__NetBSD_Version__) && __NetBSD_Version__ > 299000900) 71#define USE_STATVFS 72#define STATVFS_IN_SYS_STATVFS_H 73#else 74#define USE_STATFS 75#define STATFS_IN_SYS_MOUNT_H 76#endif 77#define HAS_POSIX_REGEXP 78#define HAS_ST_GEN /* struct stat contains inode 79 * generation number */ 80#define NATIVE_SENDMAIL_PATH "/usr/sbin/sendmail" 81#define NATIVE_MAILQ_PATH "/usr/bin/mailq" 82#define NATIVE_NEWALIAS_PATH "/usr/bin/newaliases" 83#define NATIVE_COMMAND_DIR "/usr/sbin" 84#define NATIVE_DAEMON_DIR "/usr/libexec/postfix" 85#define HAS_DLOPEN 86#endif 87 88#ifdef FREEBSD2 89#define getsid(p) getpgrp() 90#ifndef CMSG_SPACE 91#define CMSG_SPACE(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(len)) 92#endif 93#ifndef CMSG_LEN 94#define CMSG_LEN(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (len)) 95#endif 96#ifndef CMSG_ALIGN 97#define CMSG_ALIGN(n) ALIGN(n) 98#endif 99#endif /* FREEBSD2 */ 100 101#ifdef BSDI4 102/* #define HAS_IPV6 find out interface lookup method */ 103#endif 104 105/* __FreeBSD_version version is major+minor */ 106 107#if __FreeBSD_version >= 220000 108#define PREFERRED_RAND_SOURCE "dev:/dev/urandom" /* introduced 2.1.5 */ 109#endif 110 111#if __FreeBSD_version >= 300000 112#define HAS_ISSETUGID 113#define HAS_FUTIMES 114#endif 115 116#if __FreeBSD_version >= 400000 117#define SOCKADDR_SIZE socklen_t 118#define SOCKOPT_SIZE socklen_t 119#endif 120 121#if __FreeBSD_version >= 420000 122#define HAS_DUPLEX_PIPE /* 4.1 breaks with kqueue(2) */ 123#endif 124 125#if (__FreeBSD_version >= 702104 && __FreeBSD_version <= 800000) \ 126 || __FreeBSD_version >= 800100 127#define HAS_CLOSEFROM 128#endif 129 130/* OpenBSD version is year+month */ 131 132#if OpenBSD >= 199805 /* XXX */ 133#define HAS_FUTIMES /* XXX maybe earlier */ 134#endif 135 136#if (defined(OpenBSD) && OpenBSD >= 199608 && OpenBSD < 201105) 137#define PREFERRED_RAND_SOURCE "dev:/dev/arandom" /* XXX earlier */ 138#endif 139 140#if OpenBSD >= 200000 /* XXX */ 141#define HAS_ISSETUGID 142#endif 143 144#if OpenBSD >= 200200 /* XXX */ 145#define SOCKADDR_SIZE socklen_t 146#define SOCKOPT_SIZE socklen_t 147#endif 148 149#if OpenBSD >= 200405 /* 3.5 */ 150#define HAS_CLOSEFROM 151#endif 152 153/* __NetBSD_Version__ is major+minor */ 154 155#if __NetBSD_Version__ >= 103000000 /* XXX maybe earlier */ 156#undef DEF_MAILBOX_LOCK 157#define DEF_MAILBOX_LOCK "flock, dotlock" 158#define PREFERRED_RAND_SOURCE "dev:/dev/urandom" /* XXX maybe earlier */ 159#endif 160 161#if __NetBSD_Version__ >= 105000000 162#define HAS_ISSETUGID /* XXX maybe earlier */ 163#endif 164 165#if __NetBSD_Version__ >= 106000000 /* XXX maybe earlier */ 166#define SOCKADDR_SIZE socklen_t 167#define SOCKOPT_SIZE socklen_t 168#endif 169 170#if __NetBSD_Version__ >= 299000900 /* 2.99.9 */ 171#define HAS_CLOSEFROM 172#endif 173 174#if (defined(__NetBSD_Version__) && __NetBSD_Version__ >= 102000000) 175#define HAS_FUTIMES 176#endif 177 178#if defined(__DragonFly__) 179#define HAS_DEV_URANDOM 180#define HAS_ISSETUGID 181#define HAS_FUTIMES 182#define SOCKADDR_SIZE socklen_t 183#define SOCKOPT_SIZE socklen_t 184#define HAS_DUPLEX_PIPE 185#endif 186 187#if (defined(__NetBSD_Version__) && __NetBSD_Version__ >= 105000000) \ 188 || (defined(__FreeBSD__) && __FreeBSD__ >= 4) \ 189 || (defined(OpenBSD) && OpenBSD >= 200003) \ 190 || defined(__DragonFly__) \ 191 || defined(USAGI_LIBINET6) 192#ifndef NO_IPV6 193#define HAS_IPV6 194#endif 195#if !defined(NO_IPV6) || defined(__NetBSD__) 196#define HAVE_GETIFADDRS 197#endif 198#endif 199 200#if (defined(__FreeBSD_version) && __FreeBSD_version >= 300000) \ 201 || (defined(__NetBSD_Version__) && __NetBSD_Version__ >= 103000000) \ 202 || (defined(OpenBSD) && OpenBSD >= 199700) /* OpenBSD 2.0?? */ \ 203 || defined(__DragonFly__) 204#define USE_SYSV_POLL 205#endif 206 207#ifndef NO_KQUEUE 208#if (defined(__FreeBSD_version) && __FreeBSD_version >= 410000) \ 209 || (defined(__NetBSD_Version__) && __NetBSD_Version__ >= 200000000) \ 210 || (defined(OpenBSD) && OpenBSD >= 200105) /* OpenBSD 2.9 */ \ 211 || defined(__DragonFly__) 212#define EVENTS_STYLE EVENTS_STYLE_KQUEUE 213#endif 214#endif 215 216#ifndef NO_POSIX_GETPW_R 217#if (defined(__FreeBSD_version) && __FreeBSD_version >= 510000) \ 218 || (defined(__NetBSD_Version__) && __NetBSD_Version__ >= 300000000) \ 219 || (defined(OpenBSD) && OpenBSD >= 200811) /* OpenBSD 4.4 */ 220#define HAVE_POSIX_GETPW_R 221#endif 222#endif 223 224 /* 225 * UNIX on MAC. 226 */ 227#if defined(RHAPSODY5) || defined(MACOSX) 228#define SUPPORTED 229#define UINT32_TYPE unsigned int 230#define UINT16_TYPE unsigned short 231#define USE_PATHS_H 232#define HAS_FLOCK_LOCK 233#define HAS_FCNTL_LOCK 234#define INTERNAL_LOCK MYFLOCK_STYLE_FLOCK 235#define DEF_MAILBOX_LOCK "flock, dotlock" 236#define HAS_SUN_LEN 237#define HAS_FSYNC 238#define HAS_DB 239#define HAS_SA_LEN 240#define NATIVE_DB_TYPE "hash" 241#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/aliases" 242#define GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *) 0) 243#define ROOT_PATH "/bin:/usr/bin:/sbin:/usr/sbin" 244#define USE_STATFS 245#define STATFS_IN_SYS_MOUNT_H 246#define HAS_POSIX_REGEXP 247#ifndef NO_NETINFO 248#define HAS_NETINFO 249#endif 250#ifndef NO_IPV6 251#define HAS_IPV6 252#define HAVE_GETIFADDRS 253#endif 254#define HAS_FUTIMES /* XXX Guessing */ 255#define NATIVE_SENDMAIL_PATH "/usr/sbin/sendmail" 256#define NATIVE_MAILQ_PATH "/usr/bin/mailq" 257#define NATIVE_NEWALIAS_PATH "/usr/bin/newaliases" 258#define NATIVE_COMMAND_DIR "/usr/sbin" 259#define NATIVE_DAEMON_DIR "/usr/libexec/postfix" 260#define SOCKADDR_SIZE socklen_t 261#define SOCKOPT_SIZE socklen_t 262#ifndef NO_KQUEUE 263#define EVENTS_STYLE EVENTS_STYLE_KQUEUE 264#define USE_SYSV_POLL_THEN_SELECT 265#endif 266#define USE_MAX_FILES_PER_PROC 267#ifndef NO_POSIX_GETPW_R 268#define HAVE_POSIX_GETPW_R 269#endif 270#define HAS_DLOPEN 271#define PREFERRED_RAND_SOURCE "dev:/dev/urandom" 272#endif 273 274 /* 275 * Ultrix 4.x, a sort of 4.[1-2] BSD system with System V.2 compatibility 276 * and POSIX. 277 */ 278#ifdef ULTRIX4 279#define SUPPORTED 280#define UINT32_TYPE unsigned int 281#define UINT16_TYPE unsigned short 282/* Ultrix by default has only 64 descriptors per process */ 283#ifndef FD_SETSIZE 284#define FD_SETSIZE 96 285#endif 286#define _PATH_MAILDIR "/var/spool/mail" 287#define _PATH_BSHELL "/bin/sh" 288#define _PATH_DEFPATH "/bin:/usr/bin:/usr/ucb" 289#define _PATH_STDPATH "/bin:/usr/bin:/usr/etc:/usr/ucb" 290#define HAS_FLOCK_LOCK 291#define HAS_FCNTL_LOCK 292#define INTERNAL_LOCK MYFLOCK_STYLE_FLOCK 293#define DEF_MAILBOX_LOCK "flock, dotlock" 294#define HAS_FSYNC 295/* might be set by makedef */ 296#ifdef HAS_DB 297#define NATIVE_DB_TYPE "hash" 298#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/aliases" 299#else 300#define HAS_DBM 301#define NATIVE_DB_TYPE "dbm" 302#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/aliases" 303#endif 304extern int optind; 305extern char *optarg; 306extern int opterr; 307extern int h_errno; 308 309#define MISSING_STRFTIME_E 310#ifndef NO_NIS 311#define HAS_NIS 312#endif 313#define GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *) 0) 314#define ROOT_PATH "/bin:/usr/bin:/etc:/usr/etc:/usr/ucb" 315#define USE_STATFS 316#define USE_STRUCT_FS_DATA 317#define STATFS_IN_SYS_MOUNT_H 318/* Ultrix misses just S_ISSOCK, the others are there */ 319#define S_ISSOCK(mode) (((mode) & (S_IFMT)) == (S_IFSOCK)) 320#define DUP2_DUPS_CLOSE_ON_EXEC 321#define MISSING_USLEEP 322#define NO_HERRNO 323#define NATIVE_SENDMAIL_PATH "/usr/lib/sendmail" 324#define NATIVE_COMMAND_DIR "/usr/etc" 325#define NATIVE_DAEMON_DIR "/usr/libexec/postfix" 326#endif 327 328 /* 329 * OSF, then Digital UNIX, then Compaq. A BSD-flavored hybrid. 330 */ 331#ifdef OSF1 332#define SUPPORTED 333#define UINT32_TYPE unsigned int 334#define UINT16_TYPE unsigned short 335#define MISSING_SETENV 336#define USE_PATHS_H 337#define _PATH_DEFPATH "/usr/bin:/usr/ucb" 338#define HAS_FLOCK_LOCK 339#define HAS_FCNTL_LOCK 340#define INTERNAL_LOCK MYFLOCK_STYLE_FLOCK 341#define DEF_MAILBOX_LOCK "flock, dotlock" 342#define HAS_FSYNC 343#define HAVE_BASENAME 344#define HAS_DBM 345#define NATIVE_DB_TYPE "dbm" 346#define ALIAS_DB_MAP DEF_DB_TYPE ":/var/adm/sendmail/aliases" 347extern int optind; /* XXX use <getopt.h> */ 348extern char *optarg; /* XXX use <getopt.h> */ 349extern int opterr; /* XXX use <getopt.h> */ 350 351#ifndef NO_NIS 352#define HAS_NIS 353#endif 354#define GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *) 0) 355#define ROOT_PATH "/bin:/usr/bin:/sbin:/usr/sbin:/usr/ucb" 356#define USE_STATFS 357#define STATFS_IN_SYS_MOUNT_H 358#define HAS_POSIX_REGEXP 359#define BROKEN_WRITE_SELECT_ON_NON_BLOCKING_PIPE 360#define NO_MSGHDR_MSG_CONTROL 361#ifndef NO_IPV6 362#define HAS_IPV6 363#endif 364 365#endif 366 367 /* 368 * SunOS 4.x, a mostly 4.[2-3] BSD system with System V.2 compatibility and 369 * POSIX support. 370 */ 371#ifdef SUNOS4 372#define SUPPORTED 373#include <memory.h> 374#define UINT32_TYPE unsigned int 375#define UINT16_TYPE unsigned short 376#define UNSAFE_CTYPE 377#define fpos_t long 378#define MISSING_SETENV 379#define MISSING_STRERROR 380#define MISSING_STRTOUL 381#define _PATH_MAILDIR "/var/spool/mail" 382#define _PATH_BSHELL "/bin/sh" 383#define _PATH_DEFPATH "/usr/bin:/usr/ucb" 384#define _PATH_STDPATH "/usr/bin:/usr/etc:/usr/ucb" 385#define HAS_FLOCK_LOCK 386#define HAS_FCNTL_LOCK 387#define INTERNAL_LOCK MYFLOCK_STYLE_FLOCK 388#define DEF_MAILBOX_LOCK "flock, dotlock" 389#define HAS_FSYNC 390#define HAS_DBM 391#define NATIVE_DB_TYPE "dbm" 392#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/aliases" 393extern int optind; 394extern char *optarg; 395extern int opterr; 396 397#ifndef NO_NIS 398#define HAS_NIS 399#endif 400#define GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *) 0) 401#define ROOT_PATH "/bin:/usr/bin:/etc:/usr/etc:/usr/ucb" 402#define USE_STATFS 403#define STATFS_IN_SYS_VFS_H 404#define memmove(d,s,l) bcopy(s,d,l) 405#define NO_HERRNO 406#define NATIVE_SENDMAIL_PATH "/usr/lib/sendmail" 407#define NATIVE_MAILQ_PATH "/usr/ucb/mailq" 408#define NATIVE_NEWALIAS_PATH "/usr/ucb/newaliases" 409#define NATIVE_COMMAND_DIR "/usr/etc" 410#define NATIVE_DAEMON_DIR "/usr/libexec/postfix" 411#define STRCASECMP_IN_STRINGS_H 412#define OCTAL_TO_UNSIGNED(res, str) sscanf((str), "%o", &(res)) 413#define size_t unsigned 414#define ssize_t int 415#define getsid getpgrp 416#define NO_SNPRINTF 417#endif 418 419 /* 420 * SunOS 5.x, mostly System V Release 4. 421 */ 422#ifdef SUNOS5 423#define SUPPORTED 424#define UINT32_TYPE unsigned int 425#define UINT16_TYPE unsigned short 426#define _PATH_MAILDIR "/var/mail" 427#define _PATH_BSHELL "/bin/sh" 428#define _PATH_DEFPATH "/usr/bin:/usr/ucb" 429#define _PATH_STDPATH "/usr/bin:/usr/sbin:/usr/ucb" 430#define HAS_FCNTL_LOCK 431#define INTERNAL_LOCK MYFLOCK_STYLE_FCNTL 432#define DEF_MAILBOX_LOCK "fcntl, dotlock" 433#define HAS_FSYNC 434#define HAS_DBM 435#define NATIVE_DB_TYPE "dbm" 436#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/mail/aliases" 437#ifndef NO_NIS 438#define HAS_NIS 439#ifndef NO_NISPLUS 440#define HAS_NISPLUS 441#endif /* NO_NISPLUS */ 442#endif 443#define USE_SYS_SOCKIO_H /* Solaris 2.5, changed sys/ioctl.h */ 444#define GETTIMEOFDAY(t) gettimeofday(t) 445#define ROOT_PATH "/bin:/usr/bin:/sbin:/usr/sbin:/usr/ucb" 446#define FIONREAD_IN_SYS_FILIO_H 447#define USE_STATVFS 448#define STATVFS_IN_SYS_STATVFS_H 449#define INT_MAX_IN_LIMITS_H 450#ifdef STREAM_CONNECTIONS /* avoid UNIX-domain sockets */ 451#define LOCAL_LISTEN stream_listen 452#define LOCAL_ACCEPT stream_accept 453#define LOCAL_CONNECT stream_connect 454#define LOCAL_TRIGGER stream_trigger 455#define LOCAL_SEND_FD stream_send_fd 456#define LOCAL_RECV_FD stream_recv_fd 457#endif 458#define HAS_VOLATILE_LOCKS 459#define BROKEN_READ_SELECT_ON_TCP_SOCKET 460#define CANT_WRITE_BEFORE_SENDING_FD 461#ifndef NO_POSIX_REGEXP 462#define HAS_POSIX_REGEXP 463#endif 464#ifndef NO_IPV6 465#define HAS_IPV6 466#define HAS_SIOCGLIF 467#endif 468#ifndef NO_CLOSEFROM 469#define HAS_CLOSEFROM 470#endif 471#ifndef NO_DEV_URANDOM 472#define PREFERRED_RAND_SOURCE "dev:/dev/urandom" 473#endif 474#ifndef NO_FUTIMESAT 475#define HAS_FUTIMESAT 476#endif 477#define USE_SYSV_POLL 478#ifndef NO_DEVPOLL 479#define EVENTS_STYLE EVENTS_STYLE_DEVPOLL 480#endif 481#ifndef NO_POSIX_GETPW_R 482#define HAVE_POSIX_GETPW_R 483#define GETPW_R_NEEDS_POSIX_PTHREAD_SEMANTICS 484#endif 485 486/* 487 * Allow build environment to override paths. 488 */ 489#define NATIVE_SENDMAIL_PATH "/usr/lib/sendmail" 490#define NATIVE_MAILQ_PATH "/usr/bin/mailq" 491#define NATIVE_NEWALIAS_PATH "/usr/bin/newaliases" 492#define NATIVE_COMMAND_DIR "/usr/sbin" 493#define NATIVE_DAEMON_DIR "/usr/libexec/postfix" 494 495#define HAS_DLOPEN 496#endif 497 498 /* 499 * UnixWare, System Release 4. 500 */ 501#ifdef UW7 /* UnixWare 7 */ 502#define SUPPORTED 503#define UINT32_TYPE unsigned int 504#define UINT16_TYPE unsigned short 505#define _PATH_MAILDIR "/var/mail" 506#define _PATH_BSHELL "/bin/sh" 507#define _PATH_DEFPATH "/usr/bin:/usr/ucb" 508#define _PATH_STDPATH "/usr/bin:/usr/sbin:/usr/ucb" 509#define MISSING_SETENV 510#define HAS_FCNTL_LOCK 511#define INTERNAL_LOCK MYFLOCK_STYLE_FCNTL 512#define DEF_MAILBOX_LOCK "fcntl, dotlock" 513#define HAS_FSYNC 514#define HAS_DBM 515#define NATIVE_DB_TYPE "dbm" 516#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/mail/aliases" 517#ifndef NO_NIS 518#define HAS_NIS 519#endif 520#define USE_SYS_SOCKIO_H 521#define GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *) 0) 522#define ROOT_PATH "/bin:/usr/bin:/sbin:/usr/sbin:/usr/ucb" 523#define FIONREAD_IN_SYS_FILIO_H 524#define DBM_NO_TRAILING_NULL 525#define USE_STATVFS 526#define STATVFS_IN_SYS_STATVFS_H 527#define STRCASECMP_IN_STRINGS_H 528#define USE_SET_H_ERRNO 529#endif 530 531#ifdef UW21 /* UnixWare 2.1.x */ 532#define SUPPORTED 533#define UINT32_TYPE unsigned int 534#define UINT16_TYPE unsigned short 535#define _PATH_MAILDIR "/var/mail" 536#define _PATH_BSHELL "/bin/sh" 537#define _PATH_DEFPATH "/usr/bin:/usr/ucb" 538#define _PATH_STDPATH "/usr/bin:/usr/sbin:/usr/ucb" 539#define MISSING_SETENV 540#define HAS_FCNTL_LOCK 541#define INTERNAL_LOCK MYFLOCK_STYLE_FCNTL 542#define DEF_MAILBOX_LOCK "fcntl, dotlock" 543#define HAS_FSYNC 544#define HAS_DBM 545#define NATIVE_DB_TYPE "dbm" 546#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/mail/aliases" 547#ifndef NO_NIS 548#define HAS_NIS */ 549#endif 550#define USE_SYS_SOCKIO_H 551#define GETTIMEOFDAY(t) gettimeofday(t,NULL) 552#define ROOT_PATH "/bin:/usr/bin:/sbin:/usr/sbin:/usr/ucb" 553#define FIONREAD_IN_SYS_FILIO_H 554#define DBM_NO_TRAILING_NULL 555#define USE_STATVFS 556#define STATVFS_IN_SYS_STATVFS_H 557#endif 558 559 /* 560 * AIX: a SYSV-flavored hybrid. NB: fcntl() and flock() access the same 561 * underlying locking primitives. 562 */ 563#if defined(AIX5) || defined(AIX6) 564#define SUPPORTED 565#define UINT32_TYPE unsigned int 566#define UINT16_TYPE unsigned short 567#define MISSING_SETENV 568#define USE_PATHS_H 569#ifndef _PATH_BSHELL 570#define _PATH_BSHELL "/bin/sh" 571#endif 572#ifndef _PATH_MAILDIR 573#define _PATH_MAILDIR "/var/spool/mail" /* paths.h lies */ 574#endif 575#ifndef _PATH_DEFPATH 576#define _PATH_DEFPATH "/usr/bin:/usr/ucb" 577#endif 578#ifndef _PATH_STDPATH 579#define _PATH_STDPATH "/usr/bin:/usr/sbin:/usr/ucb" 580#endif 581#define HAS_FCNTL_LOCK 582#define INTERNAL_LOCK MYFLOCK_STYLE_FCNTL 583#define DEF_MAILBOX_LOCK "fcntl, dotlock" 584#define USE_SYS_SELECT_H 585#define HAS_FSYNC 586#define HAS_DBM 587#define NATIVE_DB_TYPE "dbm" 588#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/aliases" 589#ifndef NO_NIS 590#define HAS_NIS 591#endif 592#define HAS_SA_LEN 593#define GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *) 0) 594#define ROOT_PATH "/bin:/usr/bin:/sbin:/usr/sbin:/usr/ucb" 595#define SOCKADDR_SIZE socklen_t 596#define SOCKOPT_SIZE socklen_t 597#define USE_STATVFS 598#define STATVFS_IN_SYS_STATVFS_H 599#define NATIVE_SENDMAIL_PATH "/usr/sbin/sendmail" 600#define NATIVE_MAILQ_PATH "/usr/sbin/mailq" 601#define NATIVE_NEWALIAS_PATH "/usr/sbin/newaliases" 602#define NATIVE_COMMAND_DIR "/usr/sbin" 603#define NATIVE_DAEMON_DIR "/usr/libexec/postfix" 604 605 /* 606 * XXX Need CMSG_SPACE() and CMSG_LEN() but don't want to drag in everything 607 * that comes with _LINUX_SOURCE_COMPAT. 608 */ 609#include <sys/socket.h> 610#ifndef CMSG_SPACE 611#define CMSG_SPACE(len) (_CMSG_ALIGN(sizeof(struct cmsghdr)) + _CMSG_ALIGN(len)) 612#endif 613#ifndef CMSG_LEN 614#define CMSG_LEN(len) (_CMSG_ALIGN(sizeof(struct cmsghdr)) + (len)) 615#endif 616#ifndef NO_IPV6 617#define HAS_IPV6 618#endif 619#define BROKEN_AI_PASSIVE_NULL_HOST 620#define BROKEN_AI_NULL_SERVICE 621#define USE_SYSV_POLL 622#define MYMALLOC_FUZZ 1 623#endif 624 625#ifdef AIX4 626#define SUPPORTED 627#define UINT32_TYPE unsigned int 628#define UINT16_TYPE unsigned short 629#define MISSING_SETENV 630#define _PATH_BSHELL "/bin/sh" 631#define _PATH_MAILDIR "/var/spool/mail" /* paths.h lies */ 632#define _PATH_DEFPATH "/usr/bin:/usr/ucb" 633#define _PATH_STDPATH "/usr/bin:/usr/sbin:/usr/ucb" 634#define HAS_FCNTL_LOCK 635#define INTERNAL_LOCK MYFLOCK_STYLE_FCNTL 636#define DEF_MAILBOX_LOCK "fcntl, dotlock" 637#define USE_SYS_SELECT_H 638#define HAS_FSYNC 639#define HAS_DBM 640#define NATIVE_DB_TYPE "dbm" 641#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/aliases" 642#ifndef NO_NIS 643#define HAS_NIS 644#endif 645#define HAS_SA_LEN 646#define GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *) 0) 647#define RESOLVE_H_NEEDS_STDIO_H 648#define ROOT_PATH "/bin:/usr/bin:/sbin:/usr/sbin:/usr/ucb" 649#define SOCKADDR_SIZE size_t 650#define SOCKOPT_SIZE size_t 651#define USE_STATVFS 652#define STATVFS_IN_SYS_STATVFS_H 653#define STRCASECMP_IN_STRINGS_H 654#if 0 655extern time_t time(time_t *); 656extern int seteuid(uid_t); 657extern int setegid(gid_t); 658extern int initgroups(const char *, int); 659 660#endif 661#define NATIVE_SENDMAIL_PATH "/usr/lib/sendmail" 662#define NATIVE_MAILQ_PATH "/usr/sbin/mailq" 663#define NATIVE_NEWALIAS_PATH "/usr/sbin/newaliases" 664#define NATIVE_COMMAND_DIR "/usr/sbin" 665#define NATIVE_DAEMON_DIR "/usr/libexec/postfix" 666 667#define CANT_USE_SEND_RECV_MSG 668#endif 669 670#ifdef AIX3 671#define SUPPORTED 672#define UINT32_TYPE unsigned int 673#define UINT16_TYPE unsigned short 674#define MISSING_SETENV 675#define _PATH_BSHELL "/bin/sh" 676#define _PATH_MAILDIR "/var/spool/mail" /* paths.h lies */ 677#define _PATH_DEFPATH "/usr/bin:/usr/ucb" 678#define _PATH_STDPATH "/usr/bin:/usr/sbin:/usr/ucb" 679#define HAS_FCNTL_LOCK 680#define INTERNAL_LOCK MYFLOCK_STYLE_FCNTL 681#define DEF_MAILBOX_LOCK "fcntl, dotlock" 682#define USE_SYS_SELECT_H 683#define HAS_FSYNC 684#define HAS_DBM 685#define NATIVE_DB_TYPE "dbm" 686#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/aliases" 687#ifndef NO_NIS 688#define HAS_NIS 689#endif 690#define HAS_SA_LEN 691#define GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *) 0) 692#define RESOLVE_H_NEEDS_STDIO_H 693#define ROOT_PATH "/bin:/usr/bin:/sbin:/usr/sbin:/usr/ucb" 694#define SOCKADDR_SIZE size_t 695#define SOCKOPT_SIZE size_t 696#define USE_STATFS 697#define STATFS_IN_SYS_STATFS_H 698#define STRCASECMP_IN_STRINGS_H 699extern time_t time(time_t *); 700extern int seteuid(uid_t); 701extern int setegid(gid_t); 702extern int initgroups(const char *, int); 703 704#define NATIVE_SENDMAIL_PATH "/usr/lib/sendmail" 705 706#define CANT_USE_SEND_RECV_MSG 707#endif 708 709 /* 710 * IRIX, a mix of System V Releases. 711 */ 712#if defined(IRIX5) || defined(IRIX6) 713#define SUPPORTED 714#define UINT32_TYPE unsigned int 715#define UINT16_TYPE unsigned short 716#define MISSING_SETENV 717#define _PATH_MAILDIR "/var/mail" 718#define _PATH_BSHELL "/bin/sh" 719#define _PATH_DEFPATH "/usr/bin:/usr/bsd" 720#define _PATH_STDPATH "/usr/bin:/usr/sbin:/usr/bsd" 721#define HAS_FCNTL_LOCK 722#define INTERNAL_LOCK MYFLOCK_STYLE_FCNTL 723#define DEF_MAILBOX_LOCK "fcntl, dotlock" 724#define HAS_FSYNC 725#define HAS_DBM 726#define NATIVE_DB_TYPE "dbm" 727#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/aliases" 728#ifndef NO_NIS 729#define HAS_NIS 730#endif 731#define USE_SYS_SOCKIO_H /* XXX check */ 732#define GETTIMEOFDAY(t) gettimeofday(t) 733#define ROOT_PATH "/bin:/usr/bin:/sbin:/usr/sbin:/usr/bsd" 734#define FIONREAD_IN_SYS_FILIO_H /* XXX check */ 735#define DBM_NO_TRAILING_NULL /* XXX check */ 736#define USE_STATVFS 737#define STATVFS_IN_SYS_STATVFS_H 738#define BROKEN_WRITE_SELECT_ON_NON_BLOCKING_PIPE 739#define CANT_USE_SEND_RECV_MSG 740#endif 741 742#if defined(IRIX5) 743#define MISSING_USLEEP 744#endif 745 746#if defined(IRIX6) 747#ifndef NO_IPV6 748#define HAS_IPV6 749#endif 750#define HAS_POSIX_REGEXP 751#define PIPES_CANT_FIONREAD 752#endif 753 754 /* 755 * GLIBC, mainly, but not exclusively Linux 756 */ 757#ifdef __GLIBC_PREREQ 758#define HAVE_GLIBC_API_VERSION_SUPPORT(maj, min) __GLIBC_PREREQ(maj, min) 759#else 760#define HAVE_GLIBC_API_VERSION_SUPPORT(maj, min) \ 761 (defined(__GLIBC__) && \ 762 ((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min))) 763#endif 764 765 /* 766 * LINUX. 767 */ 768#if defined(LINUX2) || defined(LINUX3) || defined(LINUX4) || defined(LINUX5) \ 769 || defined(LINUX6) 770#define SUPPORTED 771#define UINT32_TYPE unsigned int 772#define UINT16_TYPE unsigned short 773#include <features.h> 774#define USE_PATHS_H 775#define HAS_FLOCK_LOCK 776#define HAS_FCNTL_LOCK 777#define INTERNAL_LOCK MYFLOCK_STYLE_FLOCK 778#define DEF_MAILBOX_LOCK "fcntl, dotlock" /* RedHat >= 4.x */ 779#define HAS_FSYNC 780#define HAS_DB 781#define NATIVE_DB_TYPE "hash" 782#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/aliases" 783#ifndef NO_NIS 784#define HAS_NIS 785#endif 786#define GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *) 0) 787#define ROOT_PATH "/bin:/usr/bin:/sbin:/usr/sbin" 788#define FIONREAD_IN_TERMIOS_H 789#define USE_STATFS 790#define STATFS_IN_SYS_VFS_H 791#define PREPEND_PLUS_TO_OPTSTRING 792#define HAS_POSIX_REGEXP 793#define HAS_DLOPEN 794#define NATIVE_SENDMAIL_PATH "/usr/sbin/sendmail" 795#define NATIVE_MAILQ_PATH "/usr/bin/mailq" 796#define NATIVE_NEWALIAS_PATH "/usr/bin/newaliases" 797#define NATIVE_COMMAND_DIR "/usr/sbin" 798#define NATIVE_DAEMON_DIR "/usr/libexec/postfix" 799#if HAVE_GLIBC_API_VERSION_SUPPORT(2, 1) 800#define SOCKADDR_SIZE socklen_t 801#define SOCKOPT_SIZE socklen_t 802#else 803#define NO_SNPRINTF 804#endif 805#ifndef NO_IPV6 806#define HAS_IPV6 807#if HAVE_GLIBC_API_VERSION_SUPPORT(2, 4) 808/* Really 2.3.3 or later, but there's no __GLIBC_MICRO version macro. */ 809#define HAVE_GETIFADDRS 810#else 811#define HAS_PROCNET_IFINET6 812#define _PATH_PROCNET_IFINET6 "/proc/net/if_inet6" 813#endif 814#endif 815#include <linux/version.h> 816#if !defined(KERNEL_VERSION) 817#define KERNEL_VERSION(a,b,c) (LINUX_VERSION_CODE + 1) 818#endif 819#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,2,0)) \ 820 || (defined(__GLIBC__) && __GLIBC__ < 2) 821#define CANT_USE_SEND_RECV_MSG 822#define DEF_SMTP_CACHE_DEMAND 0 823#else 824#define CANT_WRITE_BEFORE_SENDING_FD 825#endif 826#define PREFERRED_RAND_SOURCE "dev:/dev/urandom" /* introduced in 1.1 */ 827#ifndef NO_EPOLL 828#define EVENTS_STYLE EVENTS_STYLE_EPOLL /* introduced in 2.5 */ 829#endif 830#define USE_SYSV_POLL 831#ifndef NO_POSIX_GETPW_R 832#if (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 1) \ 833 || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE >= 1) \ 834 || (defined(_BSD_SOURCE) && _BSD_SOURCE >= 1) \ 835 || (defined(_SVID_SOURCE) && _SVID_SOURCE >= 1) \ 836 || (defined(_POSIX_SOURCE) && _POSIX_SOURCE >= 1) 837#define HAVE_POSIX_GETPW_R 838#endif 839#endif 840#if HAVE_GLIBC_API_VERSION_SUPPORT(2, 34) 841#define HAS_CLOSEFROM 842#endif 843 844#endif 845 846#ifdef LINUX1 847#define SUPPORTED 848#define UINT32_TYPE unsigned int 849#define UINT16_TYPE unsigned short 850#define USE_PATHS_H 851#define HAS_FLOCK_LOCK 852#define HAS_FCNTL_LOCK 853#define INTERNAL_LOCK MYFLOCK_STYLE_FLOCK 854#define DEF_MAILBOX_LOCK "dotlock" /* verified RedHat 3.03 */ 855#define HAS_FSYNC 856#define HAS_DB 857#define NATIVE_DB_TYPE "hash" 858#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/aliases" 859#ifndef NO_NIS 860#define HAS_NIS 861#endif 862#define GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *) 0) 863#define ROOT_PATH "/bin:/usr/bin:/sbin:/usr/sbin" 864#define FIONREAD_IN_TERMIOS_H /* maybe unnecessary */ 865#define USE_STATFS 866#define STATFS_IN_SYS_VFS_H 867#define PREPEND_PLUS_TO_OPTSTRING 868#define HAS_POSIX_REGEXP 869#define NATIVE_SENDMAIL_PATH "/usr/sbin/sendmail" 870#define NATIVE_MAILQ_PATH "/usr/bin/mailq" 871#define NATIVE_NEWALIAS_PATH "/usr/bin/newaliases" 872#define NATIVE_COMMAND_DIR "/usr/sbin" 873#define NATIVE_DAEMON_DIR "/usr/libexec/postfix" 874#define CANT_USE_SEND_RECV_MSG 875#define DEF_SMTP_CACHE_DEMAND 0 876#endif 877 878 /* 879 * GNU. 880 */ 881#ifdef GNU0 882#define SUPPORTED 883#include <features.h> 884#define USE_PATHS_H 885#define HAS_FCNTL_LOCK 886#define INTERNAL_LOCK MYFLOCK_STYLE_FCNTL 887#define DEF_MAILBOX_LOCK "fcntl, dotlock" /* RedHat >= 4.x */ 888#define HAS_FSYNC 889#define HAS_DB 890#define NATIVE_DB_TYPE "hash" 891#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/aliases" 892#ifndef NO_NIS 893#define HAS_NIS 894#endif 895#define GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *) 0) 896#define ROOT_PATH "/bin:/usr/bin:/sbin:/usr/sbin" 897#define FIONREAD_IN_TERMIOS_H 898#define USE_STATFS 899#define STATFS_IN_SYS_VFS_H 900#define UNIX_DOMAIN_CONNECT_BLOCKS_FOR_ACCEPT 901#define PREPEND_PLUS_TO_OPTSTRING 902#define HAS_POSIX_REGEXP 903#define HAS_DLOPEN 904#define NATIVE_SENDMAIL_PATH "/usr/sbin/sendmail" 905#define NATIVE_MAILQ_PATH "/usr/bin/mailq" 906#define NATIVE_NEWALIAS_PATH "/usr/bin/newaliases" 907#define NATIVE_COMMAND_DIR "/usr/sbin" 908#ifdef DEBIAN 909#define NATIVE_DAEMON_DIR "/usr/lib/postfix" 910#ifndef DEF_MANPAGE_DIR 911#define DEF_MANPAGE_DIR "/usr/share/man" 912#endif 913#ifndef DEF_SAMPLE_DIR 914#define DEF_SAMPLE_DIR "/usr/share/doc/postfix/examples" 915#endif 916#ifndef DEF_README_DIR 917#define DEF_README_DIR "/usr/share/doc/postfix" 918#endif 919#else 920#define NATIVE_DAEMON_DIR "/usr/libexec/postfix" 921#endif 922#define SOCKADDR_SIZE socklen_t 923#define SOCKOPT_SIZE socklen_t 924#ifdef __FreeBSD_kernel__ 925#define HAS_DUPLEX_PIPE 926#define HAS_ISSETUGID 927#endif 928#ifndef NO_IPV6 929#define HAS_IPV6 930#ifdef __FreeBSD_kernel__ 931#define HAVE_GETIFADDRS 932#else 933#define HAS_PROCNET_IFINET6 934#define _PATH_PROCNET_IFINET6 "/proc/net/if_inet6" 935#endif 936#endif 937#define CANT_USE_SEND_RECV_MSG 938#define DEF_SMTP_CACHE_DEMAND 0 939#define PREFERRED_RAND_SOURCE "dev:/dev/urandom" 940#endif 941 942 /* 943 * HPUX11 was copied from HPUX10, but can perhaps be trimmed down a bit. 944 */ 945#ifdef HPUX11 946#define SUPPORTED 947#define USE_SIG_RETURN 948#define UINT32_TYPE unsigned int 949#define UINT16_TYPE unsigned short 950#define HAS_DBM 951#define HAS_FCNTL_LOCK 952#define INTERNAL_LOCK MYFLOCK_STYLE_FCNTL 953#define DEF_MAILBOX_LOCK "fcntl, dotlock" 954#define HAS_FSYNC 955#define NATIVE_DB_TYPE "dbm" 956#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/mail/aliases" 957#define ROOT_PATH "/usr/bin:/sbin:/usr/sbin" 958#define MISSING_SETENV 959#ifndef NO_NIS 960#define HAS_NIS 961#endif 962#define GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *) 0) 963#define _PATH_BSHELL "/bin/sh" 964#define _PATH_MAILDIR "/var/mail" 965#define _PATH_DEFPATH "/usr/bin" 966#define _PATH_STDPATH "/usr/bin:/sbin:/usr/sbin" 967#define MISSING_SETEUID 968#define HAVE_SETRESUID 969#define MISSING_SETEGID 970#define HAVE_SETRESGID 971extern int h_errno; /* <netdb.h> imports too much stuff */ 972 973#define USE_STATFS 974#define STATFS_IN_SYS_VFS_H 975#define HAS_POSIX_REGEXP 976#define HAS_DLOPEN 977#define NATIVE_SENDMAIL_PATH "/usr/sbin/sendmail" 978#define NATIVE_MAILQ_PATH "/usr/bin/mailq" 979#define NATIVE_NEWALIAS_PATH "/usr/bin/newaliases" 980#define NATIVE_COMMAND_DIR "/usr/sbin" 981#define NATIVE_DAEMON_DIR "/usr/libexec/postfix" 982#endif 983 984#ifdef HPUX10 985#define SUPPORTED 986#define USE_SIG_RETURN 987#define UINT32_TYPE unsigned int 988#define UINT16_TYPE unsigned short 989#define HAS_DBM 990#define HAS_FCNTL_LOCK 991#define INTERNAL_LOCK MYFLOCK_STYLE_FCNTL 992#define DEF_MAILBOX_LOCK "fcntl, dotlock" 993#define HAS_FSYNC 994#define NATIVE_DB_TYPE "dbm" 995#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/mail/aliases" 996#define ROOT_PATH "/usr/bin:/sbin:/usr/sbin" 997#define MISSING_SETENV 998#ifndef NO_NIS 999#define HAS_NIS 1000#endif 1001#define GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *) 0) 1002#define _PATH_BSHELL "/bin/sh" 1003#define _PATH_MAILDIR "/var/mail" 1004#define _PATH_DEFPATH "/usr/bin" 1005#define _PATH_STDPATH "/usr/bin:/sbin:/usr/sbin" 1006#define MISSING_SETEUID 1007#define HAVE_SETRESUID 1008#define MISSING_SETEGID 1009#define HAVE_SETRESGID 1010extern int h_errno; /* <netdb.h> imports too much stuff */ 1011 1012#define USE_STATFS 1013#define STATFS_IN_SYS_VFS_H 1014#define HAS_POSIX_REGEXP 1015#define HAS_SHL_LOAD 1016#define NATIVE_SENDMAIL_PATH "/usr/sbin/sendmail" 1017#define NATIVE_MAILQ_PATH "/usr/bin/mailq" 1018#define NATIVE_NEWALIAS_PATH "/usr/bin/newaliases" 1019#define NATIVE_COMMAND_DIR "/usr/sbin" 1020#define NATIVE_DAEMON_DIR "/usr/libexec/postfix" 1021#endif 1022 1023#ifdef HPUX9 1024#define SUPPORTED 1025#define USE_SIG_RETURN 1026#define UINT32_TYPE unsigned int 1027#define UINT16_TYPE unsigned short 1028#define HAS_DBM 1029#define HAS_FCNTL_LOCK 1030#define INTERNAL_LOCK MYFLOCK_STYLE_FCNTL 1031#define DEF_MAILBOX_LOCK "fcntl, dotlock" 1032#define HAS_FSYNC 1033#ifndef NO_NIS 1034#define HAS_NIS 1035#endif 1036#define MISSING_SETENV 1037#define MISSING_RLIMIT_FSIZE 1038#define GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *) 0) 1039#define NATIVE_DB_TYPE "dbm" 1040#define ALIAS_DB_MAP DEF_DB_TYPE ":/usr/lib/aliases" 1041#define ROOT_PATH "/bin:/usr/bin:/etc" 1042#define _PATH_BSHELL "/bin/sh" 1043#define _PATH_MAILDIR "/usr/mail" 1044#define _PATH_DEFPATH "/bin:/usr/bin" 1045#define _PATH_STDPATH "/bin:/usr/bin:/etc" 1046#define MISSING_SETEUID 1047#define HAVE_SETRESUID 1048#define MISSING_SETEGID 1049#define HAVE_SETRESGID 1050extern int h_errno; 1051 1052#define USE_ULIMIT /* no setrlimit() */ 1053#define USE_STATFS 1054#define STATFS_IN_SYS_VFS_H 1055#define HAS_POSIX_REGEXP 1056#define HAS_SHL_LOAD 1057#define NATIVE_SENDMAIL_PATH "/usr/bin/sendmail" 1058#define NATIVE_MAILQ_PATH "/usr/bin/mailq" 1059#define NATIVE_NEWALIAS_PATH "/usr/bin/newaliases" 1060#define NATIVE_DAEMON_DIR "/usr/libexec/postfix" 1061#endif 1062 1063 /* 1064 * NEXTSTEP3, without -lposix, because its naming service is broken. 1065 */ 1066#ifdef NEXTSTEP3 1067#define SUPPORTED 1068#define UINT32_TYPE unsigned int 1069#define UINT16_TYPE unsigned short 1070#define HAS_DBM 1071#define HAS_FLOCK_LOCK 1072#define INTERNAL_LOCK MYFLOCK_STYLE_FLOCK 1073#define DEF_MAILBOX_LOCK "flock, dotlock" 1074#define USE_STATFS 1075#define HAVE_SYS_DIR_H 1076#define STATFS_IN_SYS_VFS_H 1077#define HAS_FSYNC 1078#ifndef NO_NIS 1079#define HAS_NIS 1080#endif 1081#define HAS_NETINFO 1082#define MISSING_SETENV_PUTENV 1083#define MISSING_MKFIFO 1084#define MISSING_SIGSET_T 1085#define MISSING_SIGACTION 1086#define MISSING_STD_FILENOS 1087#define MISSING_SETSID 1088#define MISSING_WAITPID 1089#define MISSING_UTIMBUF 1090#define HAS_WAIT4 1091#define WAIT_STATUS_T union wait 1092#define NORMAL_EXIT_STATUS(x) (WIFEXITED(x) && !WEXITSTATUS (x)) 1093#define GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *) 0) 1094#define _PATH_MAILDIR "/usr/spool/mail" 1095#define _PATH_BSHELL "/bin/sh" 1096#define _PATH_DEFPATH "/bin:/usr/bin:/usr/ucb" 1097#define _PATH_STDPATH "/bin:/usr/bin:/usr/ucb" 1098#define ROOT_PATH "/bin:/usr/bin:/usr/etc:/usr/ucb" 1099#define NATIVE_DB_TYPE "dbm" 1100#define ALIAS_DB_MAP "netinfo:/aliases" 1101#include <libc.h> 1102#define MISSING_POSIX_S_IS 1103#define MISSING_POSIX_S_MODES 1104/* It's amazing what is all missing... */ 1105#define isascii(c) ((unsigned)(c)<=0177) 1106extern int opterr; 1107typedef unsigned short mode_t; 1108 1109#define MISSING_PID_T 1110#define MISSING_STRFTIME_E 1111#define FD_CLOEXEC 1 1112#define O_NONBLOCK O_NDELAY 1113#define WEXITSTATUS(x) ((x).w_retcode) 1114#define WTERMSIG(x) ((x).w_termsig) 1115#endif 1116 1117 /* 1118 * OPENSTEP does not have posix (some fix...) 1119 */ 1120#ifdef OPENSTEP4 1121#define SUPPORTED 1122#define UINT32_TYPE unsigned int 1123#define UINT16_TYPE unsigned short 1124#define HAS_DBM 1125#define HAS_FLOCK_LOCK 1126#define INTERNAL_LOCK MYFLOCK_STYLE_FLOCK 1127#define DEF_MAILBOX_LOCK "flock, dotlock" 1128#define USE_STATFS 1129#define HAVE_SYS_DIR_H 1130#define STATFS_IN_SYS_VFS_H 1131#define HAS_FSYNC 1132#ifndef NO_NIS 1133#define HAS_NIS 1134#endif 1135#define HAS_NETINFO 1136#define MISSING_SETENV_PUTENV 1137#define MISSING_MKFIFO 1138#define MISSING_SIGSET_T 1139#define MISSING_SIGACTION 1140#define MISSING_STD_FILENOS 1141#define MISSING_SETSID 1142#define MISSING_WAITPID 1143#define MISSING_UTIMBUF 1144#define HAS_WAIT4 1145#define WAIT_STATUS_T union wait 1146#define NORMAL_EXIT_STATUS(x) (WIFEXITED(x) && !WEXITSTATUS (x)) 1147#define GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *) 0) 1148#define _PATH_MAILDIR "/usr/spool/mail" 1149#define _PATH_BSHELL "/bin/sh" 1150#define _PATH_DEFPATH "/bin:/usr/bin:/usr/ucb" 1151#define _PATH_STDPATH "/bin:/usr/bin:/usr/ucb" 1152#define ROOT_PATH "/bin:/usr/bin:/usr/etc:/usr/ucb" 1153#define NATIVE_DB_TYPE "dbm" 1154#define ALIAS_DB_MAP "netinfo:/aliases" 1155#include <libc.h> 1156#define MISSING_POSIX_S_IS 1157#define MISSING_POSIX_S_MODES 1158/* It's amazing what is all missing... */ 1159#define isascii(c) ((unsigned)(c)<=0177) 1160extern int opterr; 1161typedef unsigned short mode_t; 1162 1163#define MISSING_PID_T 1164#define MISSING_STRFTIME_E 1165#define FD_CLOEXEC 1 1166#define O_NONBLOCK O_NDELAY 1167#define WEXITSTATUS(x) ((x).w_retcode) 1168#define WTERMSIG(x) ((x).w_termsig) 1169#endif 1170 1171#ifdef ReliantUnix543 1172#define SUPPORTED 1173#define UINT32_TYPE unsigned int 1174#define UINT16_TYPE unsigned short 1175#define MISSING_SETENV 1176#define _PATH_DEFPATH "/usr/bin:/usr/ucb" 1177#define _PATH_BSHELL "/bin/sh" 1178#define _PATH_MAILDIR "/var/spool/mail" 1179#define HAS_FCNTL_LOCK 1180#define INTERNAL_LOCK MYFLOCK_STYLE_FCNTL 1181#define DEF_MAILBOX_LOCK "fcntl, dotlock" 1182#define HAS_FSYNC 1183#define FIONREAD_IN_SYS_FILIO_H 1184#define USE_SYS_SOCKIO_H 1185#define HAS_DBM 1186#define NATIVE_DB_TYPE "dbm" 1187#define ALIAS_DB_MAP DEF_DB_TYPE ":/var/adm/sendmail/aliases" 1188extern int optind; /* XXX use <getopt.h> */ 1189extern char *optarg; /* XXX use <getopt.h> */ 1190extern int opterr; /* XXX use <getopt.h> */ 1191 1192#ifndef NO_NIS 1193#define HAS_NIS 1194#endif 1195#define GETTIMEOFDAY(t) gettimeofday(t) 1196#define ROOT_PATH "/bin:/usr/bin:/sbin:/usr/sbin:/usr/ucb" 1197#define USE_STATVFS 1198#define STATVFS_IN_SYS_STATVFS_H 1199#define MISSING_USLEEP 1200#endif 1201 1202#ifdef DCOSX1 /* Siemens Pyramid */ 1203#define SUPPORTED 1204#define UINT32_TYPE unsigned int 1205#define UINT16_TYPE unsigned short 1206#define _PATH_MAILDIR "/var/mail" 1207#define _PATH_BSHELL "/bin/sh" 1208#define _PATH_DEFPATH "/usr/bin:/usr/ucb" 1209#define _PATH_STDPATH "/usr/bin:/usr/sbin:/usr/ucb" 1210#define MISSING_SETENV 1211#define HAS_FCNTL_LOCK 1212#define INTERNAL_LOCK MYFLOCK_STYLE_FCNTL 1213#define DEF_MAILBOX_LOCK "fcntl, dotlock" 1214#define HAS_FSYNC 1215#define NATIVE_DB_TYPE "hash" 1216#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/aliases" 1217/* Uncomment the following line if you have NIS package installed */ 1218/* #define HAS_NIS */ 1219#define USE_SYS_SOCKIO_H 1220#define GETTIMEOFDAY(t) gettimeofday(t,NULL) 1221#define ROOT_PATH "/bin:/usr/bin:/sbin:/usr/sbin:/usr/ucb" 1222#define FIONREAD_IN_SYS_FILIO_H 1223#define DBM_NO_TRAILING_NULL 1224#define USE_STATVFS 1225#define STATVFS_IN_SYS_STATVFS_H 1226#ifndef S_ISSOCK 1227#define S_ISSOCK(mode) ((mode&0xF000) == 0xC000) 1228#endif 1229#endif 1230 1231#ifdef SCO5 1232#define SUPPORTED 1233#include <sys/socket.h> 1234extern int h_errno; 1235 1236#define UINT32_TYPE unsigned int 1237#define UINT16_TYPE unsigned short 1238#define _PATH_MAILDIR "/usr/spool/mail" 1239#define _PATH_BSHELL "/bin/sh" 1240#define _PATH_DEFPATH "/bin:/usr/bin" 1241#define USE_PATHS_H 1242#define HAS_FCNTL_LOCK 1243#define INTERNAL_LOCK MYFLOCK_STYLE_FCNTL 1244#define DEF_MAILBOX_LOCK "fcntl, dotlock" 1245#define HAS_FSYNC 1246#define HAS_DBM 1247#define NATIVE_DB_TYPE "dbm" 1248#define ALIAS_DB_MAP DEF_DB_TYPE ":/etc/mail/aliases" 1249#define DBM_NO_TRAILING_NULL 1250#ifndef NO_NIS 1251#define HAS_NIS 1252#endif 1253#define GETTIMEOFDAY(t) gettimeofday(t,(struct timezone *) 0) 1254#define ROOT_PATH "/bin:/etc:/usr/bin:/tcb/bin" 1255#define USE_STATVFS 1256#define STATVFS_IN_SYS_STATVFS_H 1257#define MISSING_SETENV 1258#define STRCASECMP_IN_STRINGS_H 1259/* SCO5 misses just S_ISSOCK, the others are there 1260 * Use C_ISSOCK definition from cpio.h. 1261 */ 1262#include <cpio.h> 1263#define S_ISSOCK(mode) (((mode) & (S_IFMT)) == (C_ISSOCK)) 1264#define CANT_USE_SEND_RECV_MSG 1265#define DEF_SMTP_CACHE_DEMAND 0 1266#endif 1267 1268 /* 1269 * We're not going to try to guess like configure does. 1270 */ 1271#ifndef SUPPORTED 1272#error "unsupported platform" 1273#endif 1274 1275 /* 1276 * Allow command line flags to override native settings 1277 */ 1278#ifndef DEF_COMMAND_DIR 1279#ifdef NATIVE_COMMAND_DIR 1280#define DEF_COMMAND_DIR NATIVE_COMMAND_DIR 1281#endif 1282#endif 1283 1284#ifndef DEF_DAEMON_DIR 1285#ifdef NATIVE_DAEMON_DIR 1286#define DEF_DAEMON_DIR NATIVE_DAEMON_DIR 1287#endif 1288#endif 1289 1290#ifndef DEF_SENDMAIL_PATH 1291#ifdef NATIVE_SENDMAIL_PATH 1292#define DEF_SENDMAIL_PATH NATIVE_SENDMAIL_PATH 1293#endif 1294#endif 1295 1296#ifndef DEF_MAILQ_PATH 1297#ifdef NATIVE_MAILQ_PATH 1298#define DEF_MAILQ_PATH NATIVE_MAILQ_PATH 1299#endif 1300#endif 1301 1302#ifndef DEF_NEWALIAS_PATH 1303#ifdef NATIVE_NEWALIAS_PATH 1304#define DEF_NEWALIAS_PATH NATIVE_NEWALIAS_PATH 1305#endif 1306#endif 1307 1308#ifndef DEF_DB_TYPE 1309#define DEF_DB_TYPE NATIVE_DB_TYPE 1310#endif 1311 1312#define CAST_ANY_PTR_TO_INT(cptr) ((int) (long) (cptr)) 1313#define CAST_INT_TO_VOID_PTR(ival) ((void *) (long) (ival)) 1314 1315#ifdef DUP2_DUPS_CLOSE_ON_EXEC 1316/* dup2_pass_on_exec() can be found in util/sys_compat.c */ 1317extern int dup2_pass_on_exec(int oldd, int newd); 1318 1319#define DUP2 dup2_pass_on_exec 1320#else 1321#define DUP2 dup2 1322#endif 1323 1324#ifdef PREPEND_PLUS_TO_OPTSTRING 1325#define GETOPT(argc, argv, str) getopt((argc), (argv), "+" str) 1326#else 1327#define GETOPT(argc, argv, str) getopt((argc), (argv), (str)) 1328#endif 1329#define OPTIND (optind > 0 ? optind : 1) 1330 1331#if !defined(__UCLIBC__) && !defined(NO_RES_SEND) 1332#define HAVE_RES_SEND 1333#else 1334#undef HAVE_RES_SEND 1335#endif 1336 1337 /* 1338 * Check for required but missing definitions. 1339 */ 1340#if !defined(HAS_FCNTL_LOCK) && !defined(HAS_FLOCK_LOCK) 1341#error "define HAS_FCNTL_LOCK and/or HAS_FLOCK_LOCK" 1342#endif 1343 1344#if !defined(DEF_MAILBOX_LOCK) 1345#error "define DEF_MAILBOX_LOCK" 1346#endif 1347 1348#if !defined(INTERNAL_LOCK) 1349#error "define INTERNAL_LOCK" 1350#endif 1351 1352#if defined(USE_STATFS) && defined(USE_STATVFS) 1353#error "define USE_STATFS or USE_STATVFS, not both" 1354#endif 1355 1356#if !defined(USE_STATFS) && !defined(USE_STATVFS) 1357#error "define USE_STATFS or USE_STATVFS" 1358#endif 1359 1360 /* 1361 * Defaults for systems that pre-date IPv6 support. 1362 */ 1363#ifndef __NetBSD__ 1364#ifndef HAS_IPV6 1365#include <sys/socket.h> 1366#define EMULATE_IPV4_ADDRINFO 1367#define MISSING_INET_PTON 1368#define MISSING_INET_NTOP 1369extern const char *inet_ntop(int, const void *, char *, SOCKADDR_SIZE); 1370extern int inet_pton(int, const char *, void *); 1371 1372#endif 1373#endif 1374 1375 /* 1376 * Workaround: after a watchdog alarm signal, wake up from select/poll/etc. 1377 * by writing to a pipe. Solaris needs this, and HP-UX apparently, too. The 1378 * run-time cost is negligible so we just turn it on for all systems. As a 1379 * side benefit, making this code system-independent will simplify the 1380 * detection of bit-rot problems. 1381 */ 1382#ifndef NO_WATCHDOG_PIPE 1383#define USE_WATCHDOG_PIPE 1384#endif 1385 1386 /* 1387 * If we don't have defined a preferred random device above, but the system 1388 * has /dev/urandom, then we use that. 1389 */ 1390#if !defined(PREFERRED_RAND_SOURCE) && defined(HAS_DEV_URANDOM) 1391#define PREFERRED_RAND_SOURCE "dev:/dev/urandom" 1392#endif 1393 1394 /* 1395 * Defaults for systems without kqueue, /dev/poll or epoll support. 1396 * master/multi-server.c and *qmgr/qmgr_transport.c depend on this. 1397 */ 1398#if !defined(EVENTS_STYLE) 1399#define EVENTS_STYLE EVENTS_STYLE_SELECT 1400#endif 1401 1402#define EVENTS_STYLE_SELECT 1 /* Traditional BSD select */ 1403#define EVENTS_STYLE_KQUEUE 2 /* FreeBSD kqueue */ 1404#define EVENTS_STYLE_DEVPOLL 3 /* Solaris /dev/poll */ 1405#define EVENTS_STYLE_EPOLL 4 /* Linux epoll */ 1406 1407 /* 1408 * We use poll() for read/write time limit enforcement on modern systems. We 1409 * use select() on historical systems without poll() support. And on systems 1410 * where poll() is not implemented for some file handle types, we try to use 1411 * select() as a fall-back solution (MacOS X needs this). 1412 */ 1413#if !defined(USE_SYSV_POLL) && !defined(USE_SYSV_POLL_THEN_SELECT) 1414#define USE_BSD_SELECT 1415#endif 1416 1417 /* 1418 * The Postfix 2.9 post-install workaround assumes that the inet_protocols 1419 * default value is "ipv4" when Postfix is compiled without IPv6 support. 1420 */ 1421#ifndef DEF_INET_PROTOCOLS 1422#ifdef HAS_IPV6 1423#define DEF_INET_PROTOCOLS INET_PROTO_NAME_ALL 1424#else 1425#define DEF_INET_PROTOCOLS INET_PROTO_NAME_IPV4 1426#endif 1427#endif 1428 1429 /* 1430 * Defaults for systems that pre-date POSIX socklen_t. 1431 */ 1432#ifndef SOCKADDR_SIZE 1433#define SOCKADDR_SIZE int 1434#endif 1435 1436#ifndef SOCKOPT_SIZE 1437#define SOCKOPT_SIZE int 1438#endif 1439 1440 /* 1441 * Defaults for normal systems. 1442 */ 1443#ifndef LOCAL_LISTEN 1444#define LOCAL_LISTEN unix_listen 1445#define LOCAL_ACCEPT unix_accept 1446#define LOCAL_CONNECT unix_connect 1447#define LOCAL_TRIGGER unix_trigger 1448#define LOCAL_SEND_FD unix_send_fd 1449#define LOCAL_RECV_FD unix_recv_fd 1450#endif 1451 1452#if !defined (HAVE_SYS_NDIR_H) && !defined (HAVE_SYS_DIR_H) \ 1453 && !defined (HAVE_NDIR_H) 1454#define HAVE_DIRENT_H 1455#endif 1456 1457#ifndef WAIT_STATUS_T 1458typedef int WAIT_STATUS_T; 1459 1460#define NORMAL_EXIT_STATUS(status) ((status) == 0) 1461#endif 1462 1463#ifdef NO_POSIX_GETPW_R 1464#undef HAVE_POSIX_GETPW_R 1465#endif 1466 1467#ifdef NO_DB 1468#undef HAS_DB 1469#endif 1470 1471#ifndef OCTAL_TO_UNSIGNED 1472#define OCTAL_TO_UNSIGNED(res, str) ((res) = strtoul((str), (char **) 0, 8)) 1473#endif 1474 1475 /* 1476 * Avoid useless type mis-matches when using sizeof in an integer context. 1477 */ 1478#define INT_SIZEOF(foo) ((int) sizeof(foo)) 1479 1480 /* 1481 * Turn on the compatibility stuff. 1482 */ 1483#ifdef MISSING_UTIMBUF 1484struct utimbuf { 1485 time_t actime; 1486 time_t modtime; 1487}; 1488 1489#endif 1490 1491#ifdef MISSING_STRERROR 1492extern const char *strerror(int); 1493 1494#endif 1495 1496#if defined (MISSING_SETENV) || defined (MISSING_SETENV_PUTENV) 1497extern int setenv(const char *, const char *, int); 1498 1499#endif 1500 1501#ifdef MISSING_SETEUID 1502extern int seteuid(uid_t euid); 1503 1504#endif 1505 1506#ifdef MISSING_SETEGID 1507extern int setegid(gid_t egid); 1508 1509#endif 1510 1511#ifdef MISSING_MKFIFO 1512extern int mkfifo(char *, int); 1513 1514#endif 1515 1516#ifdef MISSING_WAITPID 1517extern int waitpid(int, WAIT_STATUS_T *status, int options); 1518 1519#endif 1520 1521#ifdef MISSING_SETSID 1522extern int setsid(void); 1523 1524#endif 1525 1526#ifndef HAS_CLOSEFROM 1527extern int closefrom(int); 1528 1529#endif 1530 1531#ifdef MISSING_STD_FILENOS 1532#define STDIN_FILENO 0 1533#define STDOUT_FILENO 1 1534#define STDERR_FILENO 2 1535#endif 1536 1537#ifdef MISSING_PID_T 1538typedef int pid_t; 1539 1540#endif 1541 1542#ifdef MISSING_POSIX_S_IS 1543#define S_ISBLK(mode) (((mode) & (_S_IFMT)) == (_S_IFBLK)) 1544#define S_ISCHR(mode) (((mode) & (_S_IFMT)) == (_S_IFCHR)) 1545#define S_ISDIR(mode) (((mode) & (_S_IFMT)) == (_S_IFDIR)) 1546#define S_ISSOCK(mode) (((mode) & (_S_IFMT)) == (_S_IFSOCK)) 1547#define S_ISFIFO(mode) (((mode) & (_S_IFMT)) == (_S_IFIFO)) 1548#define S_ISREG(mode) (((mode) & (_S_IFMT)) == (_S_IFREG)) 1549#define S_ISLNK(mode) (((mode) & (_S_IFMT)) == (_S_IFLNK)) 1550#endif 1551 1552#ifdef MISSING_POSIX_S_MODES 1553#define S_IRUSR _S_IRUSR 1554#define S_IRGRP 0000040 1555#define S_IROTH 0000004 1556#define S_IWUSR _S_IWUSR 1557#define S_IWGRP 0000020 1558#define S_IWOTH 0000002 1559#define S_IXUSR _S_IXUSR 1560#define S_IXGRP 0000010 1561#define S_IXOTH 0000001 1562#define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) 1563#endif 1564 1565 /* 1566 * Memory alignment of memory allocator results. By default we align for 1567 * doubles. 1568 */ 1569#ifndef ALIGN_TYPE 1570#if defined(__hpux) && defined(__ia64) 1571#define ALIGN_TYPE __float80 1572#elif defined(__ia64__) 1573#define ALIGN_TYPE long double 1574#else 1575#define ALIGN_TYPE double 1576#endif 1577#endif 1578 1579 /* 1580 * Clang-style attribute tests. 1581 * 1582 * XXX Without the unconditional test below, gcc 4.6 will barf on ``elif 1583 * defined(__clang__) && __has_attribute(__whatever__)'' with error message 1584 * ``missing binary operator before token "("''. 1585 */ 1586#ifndef __has_attribute 1587#define __has_attribute(x) 0 1588#endif /* __has_attribute */ 1589 1590 /* 1591 * Need to specify what functions never return, so that the compiler can 1592 * warn for missing initializations and other trouble. However, OPENSTEP4 1593 * gcc 2.7.x cannot handle this so we define this only if NORETURN isn't 1594 * already defined above. 1595 * 1596 * Data point: gcc 2.7.2 has __attribute__ (Wietse Venema) but gcc 2.6.3 does 1597 * not (Clive Jones). So we'll set the threshold at 2.7. 1598 */ 1599#ifndef NORETURN 1600#if (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || __GNUC__ >= 3 1601#define NORETURN void __attribute__((__noreturn__)) 1602#elif defined(__clang__) && __has_attribute(__noreturn__) 1603#define NORETURN void __attribute__((__noreturn__)) 1604#else 1605#define NORETURN void 1606#endif 1607#endif /* NORETURN */ 1608 1609 /* 1610 * Turn on format string argument checking. This is more accurate than 1611 * printfck, but it misses #ifdef-ed code. XXX I am just guessing at what 1612 * gcc versions support this. In order to turn this off for some platforms, 1613 * specify #define PRINTFLIKE and #define SCANFLIKE in the system-dependent 1614 * sections above. 1615 */ 1616#ifndef PRINTFLIKE 1617#if (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || __GNUC__ >= 3 1618#define PRINTFLIKE(x,y) __attribute__ ((format (printf, (x), (y)))) 1619#elif defined(__clang__) && __has_attribute(__format__) 1620#define PRINTFLIKE(x,y) __attribute__ ((__format__ (__printf__, (x), (y)))) 1621#else 1622#define PRINTFLIKE(x,y) 1623#endif 1624#endif /* PRINTFLIKE */ 1625 1626#ifndef SCANFLIKE 1627#if (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || __GNUC__ >= 3 1628#define SCANFLIKE(x,y) __attribute__ ((format (scanf, (x), (y)))) 1629#elif defined(__clang__) && __has_attribute(__format__) 1630#define SCANFLIKE(x,y) __attribute__ ((__format__ (__scanf__, (x), (y)))) 1631#else 1632#define SCANFLIKE(x,y) 1633#endif 1634#endif /* SCANFLIKE */ 1635 1636 /* 1637 * Some gcc implementations don't grok these attributes with pointer to 1638 * function. Again, wild guess of what is supported. To override, specify 1639 * #define PRINTFPTRLIKE in the system-dependent sections above. 1640 */ 1641#ifndef PRINTFPTRLIKE 1642#if (__GNUC__ >= 3) /* XXX Rough estimate */ 1643#define PRINTFPTRLIKE(x,y) PRINTFLIKE(x,y) 1644#elif defined(__clang__) && __has_attribute(__format__) 1645#define PRINTFPTRLIKE(x,y) __attribute__ ((__format__ (__printf__, (x), (y)))) 1646#else 1647#define PRINTFPTRLIKE(x,y) 1648#endif 1649#endif 1650 1651 /* 1652 * Compiler optimization hint. This makes sense only for code in a 1653 * performance-critical loop. 1654 */ 1655#ifndef EXPECTED 1656#if defined(__GNUC__) && (__GNUC__ > 2) 1657#define EXPECTED(x) __builtin_expect(!!(x), 1) 1658#define UNEXPECTED(x) __builtin_expect(!!(x), 0) 1659#else 1660#define EXPECTED(x) (x) 1661#define UNEXPECTED(x) (x) 1662#endif 1663#endif 1664 1665 /* 1666 * Warn about ignored function result values that must never be ignored. 1667 * Typically, this is for error results from "read" functions that normally 1668 * write to output parameters (for example, stat- or scanf-like functions) 1669 * or from functions that have other useful side effects (for example, 1670 * fseek- or rename-like functions). 1671 * 1672 * DO NOT use this for functions that write to a stream; it is entirely 1673 * legitimate to detect write errors with fflush() or fclose() only. On the 1674 * other hand most (but not all) functions that read from a stream must 1675 * never ignore result values. 1676 * 1677 * XXX Prepending "(void)" won't shut up GCC. Clang behaves as expected. 1678 */ 1679#if ((__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || __GNUC__ > 3) 1680#define WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 1681#elif defined(__clang__) && __has_attribute(warn_unused_result) 1682#define WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 1683#else 1684#define WARN_UNUSED_RESULT 1685#endif 1686 1687 /* 1688 * ISO C says that the "volatile" qualifier protects against optimizations 1689 * that cause longjmp() to clobber local variables. 1690 */ 1691#ifndef NOCLOBBER 1692#define NOCLOBBER volatile 1693#endif 1694 1695 /* 1696 * Bit banging!! There is no official constant that defines the INT_MAX 1697 * equivalent for off_t, ssize_t, etc. Wietse came up with the following 1698 * macro that works as long as off_t, ssize_t, etc. use one's or two's 1699 * complement logic (that is, the maximum value is binary 01...1). Don't use 1700 * right-shift for signed types: the result is implementation-defined. 1701 */ 1702#include <limits.h> 1703#define __MAXINT__(T) ((T) ~(((T) 1) << ((sizeof(T) * CHAR_BIT) - 1))) 1704#ifndef OFF_T_MAX 1705#define OFF_T_MAX __MAXINT__(off_t) 1706#endif 1707 1708#ifndef SSIZE_T_MAX 1709#define SSIZE_T_MAX __MAXINT__(ssize_t) 1710#endif 1711 1712 /* 1713 * Consistent enforcement of size limits. 1714 */ 1715#define ENFORCING_SIZE_LIMIT(param) ((param) > 0) 1716 1717 /* 1718 * Don't mix socket message send/receive calls with socket stream read/write 1719 * calls. The fact that you can get away with it only on some stacks implies 1720 * that there is no long-term guarantee. 1721 */ 1722#ifndef CAN_WRITE_BEFORE_SENDING_FD 1723#define CANT_WRITE_BEFORE_SENDING_FD 1724#endif 1725 1726 /* 1727 * FreeBSD sendmsg(2) says that after sending a file descriptor, the sender 1728 * must not immediately close the descriptor, otherwise it may close the 1729 * descriptor before it is actually sent. 1730 */ 1731#ifndef DONT_WAIT_AFTER_SENDING_FD 1732#define MUST_READ_AFTER_SENDING_FD 1733#endif 1734 1735 /* 1736 * Hope for the best. 1737 */ 1738#ifndef UINT32_TYPE 1739#define UINT32_TYPE uint32_t 1740#define UINT16_TYPE uint16_t 1741#endif 1742#define UINT32_SIZE 4 1743#define UINT16_SIZE 2 1744 1745 /* 1746 * For the sake of clarity. 1747 */ 1748#ifndef HAVE_CONST_CHAR_STAR 1749typedef const char *CONST_CHAR_STAR; 1750 1751#endif 1752 1753 /* 1754 * Safety. On some systems, ctype.h misbehaves with non-ASCII or negative 1755 * characters. More importantly, Postfix uses the ISXXX() macros to ensure 1756 * protocol compliance, so we have to rule out non-ASCII characters. 1757 * 1758 * XXX The (unsigned char) casts in isalnum() etc arguments are unnecessary 1759 * because the ISASCII() guard already ensures that the values are 1760 * non-negative; the casts are done anyway to shut up chatty compilers. 1761 */ 1762#define ISASCII(c) isascii(_UCHAR_(c)) 1763#define _UCHAR_(c) ((unsigned char)(c)) 1764#define ISALNUM(c) (ISASCII(c) && isalnum((unsigned char)(c))) 1765#define ISALPHA(c) (ISASCII(c) && isalpha((unsigned char)(c))) 1766#define ISCNTRL(c) (ISASCII(c) && iscntrl((unsigned char)(c))) 1767#define ISDIGIT(c) (ISASCII(c) && isdigit((unsigned char)(c))) 1768#define ISGRAPH(c) (ISASCII(c) && isgraph((unsigned char)(c))) 1769#define ISLOWER(c) (ISASCII(c) && islower((unsigned char)(c))) 1770#define ISPRINT(c) (ISASCII(c) && isprint((unsigned char)(c))) 1771#define ISPUNCT(c) (ISASCII(c) && ispunct((unsigned char)(c))) 1772#define ISSPACE(c) (ISASCII(c) && isspace((unsigned char)(c))) 1773#define ISUPPER(c) (ISASCII(c) && isupper((unsigned char)(c))) 1774#define TOLOWER(c) (ISUPPER(c) ? tolower((unsigned char)(c)) : (c)) 1775#define TOUPPER(c) (ISLOWER(c) ? toupper((unsigned char)(c)) : (c)) 1776 1777 /* 1778 * Character sets for parsing. 1779 */ 1780#define CHARS_COMMA_SP ", \t\r\n" /* list separator */ 1781#define CHARS_SPACE " \t\r\n" /* word separator */ 1782#define CHARS_BRACE "{}" /* grouping */ 1783 1784 /* 1785 * Scaffolding. I don't want to lose messages while the program is under 1786 * development. 1787 */ 1788extern int REMOVE(const char *); 1789 1790/* LICENSE 1791/* .ad 1792/* .fi 1793/* The Secure Mailer license must be distributed with this software. 1794/* AUTHOR(S) 1795/* Wietse Venema 1796/* IBM T.J. Watson Research 1797/* P.O. Box 704 1798/* Yorktown Heights, NY 10598, USA 1799/* 1800/* Wietse Venema 1801/* Google, Inc. 1802/* 111 8th Avenue 1803/* New York, NY 10011, USA 1804/*--*/ 1805 1806#endif 1807