[BACK]Return to generic.h CVS log [TXT][DIR] Up to [local] / src / usr.bin / nc

Annotation of src/usr.bin/nc/generic.h, Revision 1.1

1.1     ! deraadt     1: /* generic.h -- anything you don't #undef at the end remains in effect.
        !             2:    The ONLY things that go in here are generic indicator flags; it's up
        !             3:    to your programs to declare and call things based on those flags.
        !             4:
        !             5:    You should only need to make changes via a minimal system-specific section
        !             6:    at the end of this file.  To build a new section, rip through this and
        !             7:    check everything it mentions on your platform, and #undef that which needs
        !             8:    it.  If you generate a system-specific section you didn't find in here,
        !             9:    please mail me a copy so I can update the "master".
        !            10:
        !            11:    I realize I'm probably inventing another pseudo-standard here, but
        !            12:    goddamnit, everybody ELSE has already, and I can't include all of their
        !            13:    hairball schemes too.  HAVE_xx conforms to the gnu/autoconf usage and
        !            14:    seems to be the most common format.  In fact, I dug a lot of these out
        !            15:    of autoconf and tried to common them all together using "stupidh" to
        !            16:    collect data from platforms.
        !            17:
        !            18:    In disgust...  _H*  940910, 941115, 950511.  Pseudo-version: 1.3
        !            19:
        !            20:    Updated 951104 with many patches from netcat feedback, and properly
        !            21:    closed a lot of slop in open-ended comments: version 1.4
        !            22:    960217 + nextstep: version 1.5
        !            23: */
        !            24:
        !            25: #ifndef GENERIC_H              /* only run through this once */
        !            26: #define GENERIC_H
        !            27:
        !            28: /* =============================== */
        !            29: /* System calls, lib routines, etc */
        !            30: /* =============================== */
        !            31:
        !            32: /* How does your system declare malloc, void or char?  Usually void, but go
        !            33:    ask the SunOS people why they had to be different... */
        !            34: #define VOID_MALLOC
        !            35:
        !            36: /* notably from fwtk/firewall.h: posix locking? */
        !            37: #define HAVE_FLOCK             /* otherwise it's lockf() */
        !            38:
        !            39: /* if you don't have setsid(), you might have setpgrp(). */
        !            40: #define HAVE_SETSID
        !            41:
        !            42: /* random() is generally considered better than rand() */
        !            43: #define HAVE_RANDOM
        !            44:
        !            45: /* the srand48/lrand48/etc family is s'posedly even better */
        !            46: #define HAVE_RAND48
        !            47: /* bmc@telebase and others have suggested these macros if a box *does* have
        !            48:    rand48.  Will consider for later if we're doing something that really
        !            49:    requires stronger random numbers, but netcat and such certainly doesn't.
        !            50: #define srandom(seed) srand48((long) seed)
        !            51: #define random()      lrand48() */
        !            52:
        !            53: /* if your machine doesn't have lstat(), it should have stat() [dos...] */
        !            54: #define HAVE_LSTAT
        !            55:
        !            56: /* different kinds of term ioctls.  How to recognize them, very roughly:
        !            57:    sysv/POSIX_ME_HARDER:  termio[s].h, struct termio[s], tty.c_*[]
        !            58:    bsd/old stuff:  sgtty.h, ioctl(TIOCSETP), sgttyb.sg_*, tchars.t_*  */
        !            59: #define HAVE_TERMIOS
        !            60:
        !            61: /* dbm vs ndbm */
        !            62: #define HAVE_NDBM
        !            63:
        !            64: /* extended utmp/wtmp stuff.  MOST machines still do NOT have this SV-ism */
        !            65: #define UTMPX
        !            66:
        !            67: /* some systems have nice() which takes *relative* values... [resource.h] */
        !            68: #define HAVE_SETPRIORITY
        !            69:
        !            70: /* a sysvism, I think, but ... */
        !            71: #define HAVE_SYSINFO
        !            72:
        !            73: /* ============= */
        !            74: /* Include files */
        !            75: /* ============= */
        !            76:
        !            77: /* Presence of these can be determined via a script that sniffs them
        !            78:    out if you aren't sure.  See "stupidh"... */
        !            79:
        !            80: /* stdlib comes with most modern compilers, but ya never know */
        !            81: #define HAVE_STDLIB_H
        !            82:
        !            83: /* not on a DOS box! */
        !            84: #define HAVE_UNISTD_H
        !            85:
        !            86: /* stdarg is a weird one */
        !            87: #define HAVE_STDARG_H
        !            88:
        !            89: /* dir.h or maybe ndir.h otherwise. */
        !            90: #define HAVE_DIRENT_H
        !            91:
        !            92: /* string or strings */
        !            93: #define HAVE_STRINGS_H
        !            94:
        !            95: /* if you don't have lastlog.h, what you want might be in login.h */
        !            96: #define HAVE_LASTLOG_H
        !            97:
        !            98: /* predefines for _PATH_various */
        !            99: #define HAVE_PATHS_H
        !           100:
        !           101: /* some SV-flavors break select stuff out separately */
        !           102: #define HAVE_SELECT_H
        !           103:
        !           104: /* assorted others */
        !           105: #define HAVE_PARAM_H           /* in sys/ */
        !           106: #define HAVE_SYSMACROS_H       /* in sys/ */
        !           107: #define HAVE_TTYENT_H          /* securetty et al */
        !           108:
        !           109: /* ==================== */
        !           110:
        !           111: /* Still maybe have to do something about the following, if it's even
        !           112:    worth it.  I just grepped a lot of these out of various code, without
        !           113:    looking them up yet:
        !           114:
        !           115: #define HAVE_EINPROGRESS
        !           116: #define HAVE_F_SETOWN
        !           117: HAVE_FILIO_H ... fionbio, fiosetown, etc... will need for hairier
        !           118:   select loops.
        !           119: #define HAVE_SETENV ... now *there's* a hairy one; **environ is portable
        !           120: #define BIG_ENDIAN/little_endian ... *please* try to avoid this stupidity
        !           121:    and LSBFIRST/MSBFIRST
        !           122: #define HAVE_GETUSERSHELL ... you could always pull it out of getpwent()
        !           123: #define HAVE_SETE[UG]ID ... lib or syscall, it varies on diff platforms
        !           124: #define HAVE_STRCHR ... should actually be handled by string/strings
        !           125: #define HAVE_PSTAT
        !           126: #define HAVE_ST_BLKSIZE ... a stat() thing?
        !           127: #define HAVE_IP_TOS
        !           128: #define HAVE_STRFTIME ... screw this, we'll just INCLUDE one for lame
        !           129:    old boxes that don't have it [sunos 3.x, early 4.x?]
        !           130: #define HAVE_VFPRINTF
        !           131: #define HAVE_SHADOW_PASSWD  ... in its multitudinous schemes?? ... how
        !           132:    about sumpin' like #define SHADOW_PASSWD_TYPE ... could get grody.
        !           133:    ... looks like sysv /etc/shadow, getspent() family is common.
        !           134: #define SIG*  ... what a swamp, punt for now; should all be in signal.h
        !           135: #define HAVE_STRCSPN  ... see larry wall's comment in the fwtk regex code
        !           136: #define ULTRIX_AUTH  ... bwahaha.
        !           137: #define HAVE_YP  or NIS or whatever you wanna call it this week
        !           138: randomness about VARARGS??
        !           139: --- later stuff to be considered ---
        !           140: #define UINT4 ... u-int on alpha/osf, i.e. __alpha/__osf__, ulong elsewhere?
        !           141:    dont name it that, though, it'll conflict with extant .h files like md5
        !           142: randomness about machine/endian.h, machine/inline.h -- bsdi, net/2
        !           143: randomness about _PATH_WTMP vs WTMP_FILE and where they even live!!
        !           144: #define HAVE_SYS_ERRLIST ... whether it's in stdio.h or not [bsd 4.4]
        !           145: --- still more stuff
        !           146: #define HAVE_SETENV
        !           147: #define _PATH_UTMP vs UTMP_FILE, a la deslogind?!
        !           148: #define HAVE_DAEMON
        !           149: #define HAVE_INETADDR  [vixie bind?]
        !           150: lseek: SEEK_SET vs L_SET and associated lossage [epi-notes, old 386Mach]
        !           151: bsdi: ioctl_compat.h ?
        !           152: --- takin' some ifdefs from CNS krb:
        !           153: F_GETOWN/F_SETOWN
        !           154: CRAY: long = 8 bytes, etc  [class with alpha?]
        !           155: CGETENT
        !           156: SIGINFO
        !           157: SIGTSTP SIGTTOU SIGWINCH
        !           158: SPX?
        !           159: SYSV_TERMIO -- covered elsewhere, I hope
        !           160: TIOCEXT TIOCFLUSH TIOC[GS]WINSIZ
        !           161: NEWINIT: something about init cleaning up dead login processes [telnet?]
        !           162: PARENT_DOES_UTMP, too  [telnet]
        !           163: VDISCARD
        !           164: VEOL/VEOL2/VLNEXT VREPRINT -- termios stuff?, and related...
        !           165: STREAMSPTY/STREAMSPTYEM
        !           166: AF_INET/AF_UNSPEC, PF_*
        !           167: ECHOCTL/ECHOKE
        !           168: F_ULOCK [?!]
        !           169: setpgrp/getpgrp() ONEARG business..
        !           170: HAVE_ALLOCA
        !           171: HAVE_GETUTENT
        !           172: HAVE_SYS_SELECT_H  [irix!]
        !           173: HAVE_DIRENT  [old 386mach has *direct.h*!]
        !           174: HAVE_SIGSET
        !           175: HAVE_VFORK_H and HAVE_VFORK
        !           176: HAVE_VHANGUP
        !           177: HAVE_VSPRINTF
        !           178: HAVE_IPTOS_*
        !           179: HAVE_STRCASECMP, STRNCASECMP
        !           180: HAVE_SYS_FCNTL_H
        !           181: HAVE_SYS_TIME_H
        !           182: HAVE_UTIMES
        !           183: NOTTYENT [?]
        !           184: HAVE_FCHMOD
        !           185: HAVE_GETUSERSHELL
        !           186: HAVE_SIGCONTEXT  [stack hair, very machine-specific]
        !           187: YYLINENO?
        !           188: POSIX_SIGNALS
        !           189: POSIX_TERMIOS
        !           190: SETPROCTITLE -- breaks some places, like fbsd sendmail
        !           191: SIG* -- actual signal names?  some are missing
        !           192: SIOCGIFCONF
        !           193: SO_BROADCAST
        !           194: SHMEM  [krb tickets]
        !           195: VARARGS, or HAVE_VARARGS
        !           196: CBAUD
        !           197: ... and B300, B9600, etc etc
        !           198: HAVE_BZERO  vs  memset/memcpy
        !           199: HAVE_SETVBUF
        !           200: HAVE_STRDUP
        !           201: HAVE_GETENV
        !           202: HAVE_STRSAVE
        !           203: HAVE_STBLKSIZE  [stat?]
        !           204: HAVE_STREAM_H -- in sys/, ref sendmail 8.7 for IP_SRCROUTE
        !           205: FCHMOD
        !           206: INITGROUPS -- most machines seem to *have*
        !           207: SETREUID
        !           208: SNPRINTF
        !           209: SETPGRP semantics bsd vs. sys5 style
        !           210:
        !           211: There's also the issue about WHERE various .h files live, sys/ or otherwise.
        !           212: There's a BIG swamp lurking where network code of any sort lives.
        !           213: */
        !           214:
        !           215: /* ======================== */
        !           216: /* System-specific sections */
        !           217: /* ======================== */
        !           218:
        !           219: /* By turning OFF various bits of the above,  you can customize for
        !           220:    a given platform.  Yes, we're ignoring the stock compiler predefines
        !           221:    and using our own plugged in via the Makefile. */
        !           222:
        !           223: /* DOS boxes, with MSC; you may need to adapt to a different compiler. */
        !           224: /* looks like later ones *do* have dirent.h, for example */
        !           225: #ifdef MSDOS
        !           226: #undef HAVE_FLOCK
        !           227: #undef HAVE_RANDOM
        !           228: #undef HAVE_LSTAT
        !           229: #undef HAVE_TERMIOS
        !           230: #undef UTMPX
        !           231: #undef HAVE_SYSINFO
        !           232: #undef HAVE_UNISTD_H
        !           233: #undef HAVE_DIRENT_H   /* unless you have the k00l little wrapper from L5!! */
        !           234: #undef HAVE_STRINGS_H
        !           235: #undef HAVE_LASTLOG_H
        !           236: #undef HAVE_PATHS_H
        !           237: #undef HAVE_PARAM_H
        !           238: #undef HAVE_SYSMACROS_H
        !           239: #undef HAVE_SELECT_H
        !           240: #undef HAVE_TTYENT_H
        !           241: #endif /* MSDOS */
        !           242:
        !           243: /* buglix 4.x; dunno about 3.x on down.  should be bsd4.2 */
        !           244: #ifdef ULTRIX
        !           245: #undef UTMPX
        !           246: #undef HAVE_PATHS_H
        !           247: #undef HAVE_SYSMACROS_H
        !           248: #undef HAVE_SELECT_H
        !           249: #endif /* buglix */
        !           250:
        !           251: /* some of this might still be broken on older sunoses */
        !           252: #ifdef SUNOS
        !           253: #undef VOID_MALLOC
        !           254: #undef UTMPX
        !           255: #undef HAVE_PATHS_H
        !           256: #undef HAVE_SELECT_H
        !           257: #endif /* sunos */
        !           258:
        !           259: /* "contact your vendor for a fix" */
        !           260: #ifdef SOLARIS
        !           261: /* has UTMPX */
        !           262: #undef HAVE_RANDOM
        !           263: #undef HAVE_SETPRIORITY
        !           264: #undef HAVE_STRINGS_H  /* this is genuinely the case, go figure */
        !           265: #undef HAVE_PATHS_H
        !           266: #undef HAVE_SELECT_H
        !           267: #undef HAVE_TTYENT_H
        !           268: #endif /* SOLARIS */
        !           269:
        !           270: /* whatever aix variant MIT had at the time; 3.2.x?? */
        !           271: #ifdef AIX
        !           272: #undef UTMPX
        !           273: #undef HAVE_LASTLOG_H
        !           274: #define HAVE_LOGIN_H   /* "special", in the educational sense */
        !           275: #endif /* aix */
        !           276:
        !           277: /* linux, which is trying as desperately as the gnu folks can to be
        !           278:    POSIXLY_CORRECT.  I think I'm gonna hurl... */
        !           279: #ifdef LINUX
        !           280: #undef UTMPX
        !           281: #undef HAVE_SYSINFO
        !           282: #undef HAVE_SELECT_H
        !           283: #undef HAVE_TTYENT_H
        !           284: #endif /* linux */
        !           285:
        !           286: /* irix 5.x; may not be correct for earlier ones */
        !           287: #ifdef IRIX
        !           288: /* wow, does irix really have everything?! */
        !           289: #endif /* irix */
        !           290:
        !           291: /* osf on alphas */
        !           292: #ifdef OSF
        !           293: #undef UTMPX
        !           294: #undef HAVE_SELECT_H
        !           295: #endif /* osf */
        !           296:
        !           297: /* they's some FUCKED UP paths in this one! */
        !           298: #ifdef FREEBSD
        !           299: #undef UTMPX
        !           300: #undef HAVE_SYSINFO
        !           301: #undef HAVE_LASTLOG_H
        !           302: #undef HAVE_SYSMACROS_H
        !           303: #undef HAVE_SELECT_H   /* actually a lie, but only for kernel */
        !           304: #endif /* freebsd */
        !           305:
        !           306: /* Originally from the sidewinder site, of all places, but subsequently
        !           307:    checked further under a more normal bsdi 2.0 */
        !           308: #ifdef BSDI
        !           309: #undef UTMPX
        !           310: #undef HAVE_LASTLOG_H
        !           311: #undef HAVE_SYSMACROS_H
        !           312: /* and their malloc.h was in sys/ ?! */
        !           313: #undef HAVE_SELECT_H
        !           314: #endif /* bsdi */
        !           315:
        !           316: /* netbsd/44lite, jives with amiga-netbsd from cactus */
        !           317: #ifdef NETBSD
        !           318: #undef UTMPX
        !           319: #undef HAVE_SYSINFO
        !           320: #undef HAVE_LASTLOG_H
        !           321: #undef HAVE_SELECT_H
        !           322: #endif /* netbsd */
        !           323:
        !           324: /* Hpux 9.0x, from BBN and various patches sent in */
        !           325: #ifdef HPUX
        !           326: #undef HAVE_RANDOM     /* but *does* have ?rand48 -- need to consider.. */
        !           327: #undef HAVE_UTMPX
        !           328: #undef HAVE_LASTLOG_H  /* has utmp/wtmp/btmp nonsense, and pututline() */
        !           329: #undef HAVE_PATHS_H
        !           330: #undef HAVE_SELECT_H
        !           331: #undef HAVE_TTYENT_H
        !           332: #endif /* hockeypux */
        !           333:
        !           334: /* Unixware [a loose definition of "unix", to be sure], 1.1.2 [at least]
        !           335:    from Brian Clapper.  He wasn't sure about 2.0... */
        !           336: #ifdef UNIXWARE
        !           337: /* has UTMPX */
        !           338: #undef HAVE_SETPRIORITY
        !           339: /* NOTE: UnixWare does provide the BSD stuff, in "/usr/ucbinclude" (headers)
        !           340:    and "/usr/ucblib" (libraries).  However, I've run into problems linking
        !           341:    stuff out of that version of the C library, when objects are also coming
        !           342:    out of the "regular" C library.  My advice: Avoid the BSD compatibility
        !           343:    stuff wherever possible.  Brian Clapper <bmc@telebase.com> */
        !           344: #undef HAVE_STRINGS_H
        !           345: #undef HAVE_PATHS_H
        !           346: #undef HAVE_TTYENT_H
        !           347: #endif /* UNIXWARE */
        !           348:
        !           349: /* A/UX 3.1.x from darieb@sandia.gov */
        !           350: #ifdef AUX
        !           351: #undef HAVE_RANDOM
        !           352: #undef HAVE_SELECT_H   /* xxx: untested */
        !           353: #endif /* a/ux */
        !           354:
        !           355: /* NeXTSTEP 3.2 motorola mudge@l0pht.com xxx should also work with
        !           356:    white hardware and Sparc/HPPA. Should work with 3.3 too as it's
        !           357:    4.3 / 4.4 bsd wrapped around mach */
        !           358: #ifdef NEXT
        !           359: #undef UTMPX
        !           360: #undef HAVE_SELECT_X
        !           361: #endif /* NeXTSTEP 3.2 motorola */
        !           362:
        !           363: /* Make some "generic" assumptions if all else fails */
        !           364: #ifdef GENERIC
        !           365: #undef HAVE_FLOCK
        !           366: #if defined(SYSV) && (SYSV < 4)  /* TW leftover: old SV doesnt have symlinks */
        !           367: #undef HAVE_LSTAT
        !           368: #endif /* old SYSV */
        !           369: #undef HAVE_TERMIOS
        !           370: #undef UTMPX
        !           371: #undef HAVE_PATHS_H
        !           372: #undef HAVE_SELECT_H
        !           373: #endif /* generic */
        !           374:
        !           375: /* ================ */
        !           376: #endif /* GENERIC_H */
        !           377: