1232633Smp/* $Header: /p/tcsh/cvsroot/tcsh/tc.os.h,v 3.105 2011/02/04 18:00:26 christos Exp $ */ 259243Sobrien/* 359243Sobrien * tc.os.h: Shell os dependent defines 459243Sobrien */ 559243Sobrien/*- 659243Sobrien * Copyright (c) 1980, 1991 The Regents of the University of California. 759243Sobrien * All rights reserved. 859243Sobrien * 959243Sobrien * Redistribution and use in source and binary forms, with or without 1059243Sobrien * modification, are permitted provided that the following conditions 1159243Sobrien * are met: 1259243Sobrien * 1. Redistributions of source code must retain the above copyright 1359243Sobrien * notice, this list of conditions and the following disclaimer. 1459243Sobrien * 2. Redistributions in binary form must reproduce the above copyright 1559243Sobrien * notice, this list of conditions and the following disclaimer in the 1659243Sobrien * documentation and/or other materials provided with the distribution. 17100616Smp * 3. Neither the name of the University nor the names of its contributors 1859243Sobrien * may be used to endorse or promote products derived from this software 1959243Sobrien * without specific prior written permission. 2059243Sobrien * 2159243Sobrien * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 2259243Sobrien * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2359243Sobrien * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2459243Sobrien * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2559243Sobrien * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2659243Sobrien * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2759243Sobrien * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2859243Sobrien * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2959243Sobrien * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3059243Sobrien * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3159243Sobrien * SUCH DAMAGE. 3259243Sobrien */ 3359243Sobrien#ifndef _h_tc_os 3459243Sobrien#define _h_tc_os 3559243Sobrien 3659243Sobrien#ifdef notdef 3759243Sobrien/* 3859243Sobrien * for SVR4 and linux we used to fork pipelines backwards. 3959243Sobrien * This should not be needed any more. 4059243Sobrien * more info in sh.sem.c 4159243Sobrien */ 4259243Sobrien# define BACKPIPE 4359243Sobrien#endif /* notdef */ 4459243Sobrien 4569408Sache#ifdef __CYGWIN__ 46131962Smp# undef NOFILE 47131962Smp# define NOFILE sysconf(_SC_OPEN_MAX) 4869408Sache#endif 4969408Sache 5059243Sobrien#ifdef _VMS_POSIX 5159243Sobrien# ifndef NOFILE 5259243Sobrien# define NOFILE 64 5359243Sobrien# endif /* NOFILE */ 5459243Sobrien# define nice(a) setprio((getpid()),a) 5559243Sobrien# include <sys/time.h> /* for time stuff in tc.prompt.c */ 5659243Sobrien# include <limits.h> 5759243Sobrien#endif /* atp vmsposix */ 5859243Sobrien 5959243Sobrien#if defined(DECOSF1) || defined(HPUXVERSION) 6059243Sobrien# include <sys/signal.h> 6159243Sobrien#endif /* DECOSF1 || HPUXVERSION */ 6259243Sobrien 6359243Sobrien#ifdef DECOSF1 6459243Sobrien# include <sys/ioctl.h> 6559243Sobrien#endif /* DECOSF1 */ 6659243Sobrien 6759243Sobrien#if defined(OPEN_MAX) && !defined(NOFILE) 6859243Sobrien# define NOFILE OPEN_MAX 6959243Sobrien#endif /* OPEN_MAX && !NOFILE */ 7059243Sobrien 7159243Sobrien#if defined(USR_NFDS) && !defined(NOFILE) 7259243Sobrien# define NOFILE USR_NFDS 7359243Sobrien#endif /* USR_NFDS && !NOFILE */ 7459243Sobrien 7559243Sobrien#ifndef NOFILE 7659243Sobrien# define NOFILE 256 7759243Sobrien#endif /* NOFILE */ 7859243Sobrien 7959243Sobrien#ifdef OREO 8059243Sobrien# include <sys/time.h> 8159243Sobrien# ifdef notdef 8259243Sobrien /* Don't include it, because it defines things we don't really have */ 8359243Sobrien# include <sys/resource.h> 8459243Sobrien# endif /* notdef */ 8559243Sobrien# ifdef POSIX 8659243Sobrien# include <sys/tty.h> 8759243Sobrien# include <termios.h> 8859243Sobrien# endif /* POSIX */ 8959243Sobrien#endif /* OREO */ 9059243Sobrien 91195609Smp#ifdef __QNXNTO__ 92195609Smp#include <sys/resource.h> 93195609Smp#include <fcntl.h> 94195609Smp#undef O_TEXT 95195609Smp#undef O_BINARY 96195609Smp#endif 97195609Smp 9859243Sobrien#ifdef convex 9959243Sobrien# include <sys/dmon.h> 10059243Sobrien#endif /* convex */ 10159243Sobrien 10259243Sobrien#ifdef titan 10359243Sobrienextern int end; 10459243Sobrien#endif /* titan */ 10559243Sobrien 10659243Sobrien#ifdef hpux 10759243Sobrien# ifdef lint 10859243Sobrien/* 10959243Sobrien * Hpux defines struct ucred, in <sys/user.h>, but if I include that 11059243Sobrien * then I need to include the *world* 11159243Sobrien * [all this to pass lint cleanly!!!] 11259243Sobrien * so I define struct ucred here... 11359243Sobrien */ 11459243Sobrienstruct ucred { 11559243Sobrien int foo; 11659243Sobrien}; 11759243Sobrien# endif /* lint */ 11859243Sobrien 11959243Sobrien/* 12059243Sobrien * hpux 7.0 does not define it 12159243Sobrien */ 12259243Sobrien# ifndef CSUSP 12359243Sobrien# define CSUSP 032 12459243Sobrien# endif /* CSUSP */ 12559243Sobrien 12659243Sobrien# include <signal.h> 12759243Sobrien# if !defined(hp9000s500) && !(defined(SIGRTMAX) || defined(SIGRTMIN)) 12859243Sobrien/* 12959243Sobrien * hpux < 7 13059243Sobrien */ 13159243Sobrien# include <sys/bsdtty.h> 13259243Sobrien# endif /* !hp9000s500 && !(SIGRTMAX || SIGRTMIN) */ 13359243Sobrien 134100616Smp# ifndef TIOCSTI 135100616Smp# include <sys/strtio.h> 136100616Smp# endif 13759243Sobrien#endif /* hpux */ 13859243Sobrien 13959243Sobrien/* 14059243Sobrien * ISC does not define CSUSP 14159243Sobrien */ 14259243Sobrien#ifdef ISC 14359243Sobrien# ifndef CSUSP 14459243Sobrien# define CSUSP 032 14559243Sobrien# endif /* CSUSP */ 14659243Sobrien# if defined(POSIX) && !defined(TIOCGWINSZ) 14759243Sobrien/* 14859243Sobrien * ISC defines this only in termio.h. If we are using POSIX and include 14959243Sobrien * termios.h, then we define it ourselves so that window resizing works. 15059243Sobrien */ 15159243Sobrien# define TIOCGWINSZ (('T'<<8)|104) 15259243Sobrien# endif /* POSIX && !TIOCGWINSZ */ 15359243Sobrien#endif /* ISC */ 15459243Sobrien 15559243Sobrien#ifdef ISC202 15659243Sobrien# undef TIOCGWINSZ 15759243Sobrien#endif /* ISC202 */ 15859243Sobrien 15959243Sobrien/* 16059243Sobrien * XXX: This will be changed soon to 16159243Sobrien * #if (SYSVREL > 0) && defined(TIOCGWINSZ) 16259243Sobrien * If that breaks on your machine, let me know. 16359243Sobrien * 164145479Smp * It would break on glibc, where all this is 16559243Sobrien * defined in <termios.h>. Wrapper added. 16659243Sobrien */ 167232633Smp#if !defined(__linux__) && !defined(__GNU__) && !defined(__GLIBC__) && !defined(_VMS_POSIX) 16859243Sobrien# if defined(INTEL) || defined(u3b2) || defined (u3b5) || defined(ub15) || defined(u3b20d) || defined(ISC) || defined(SCO) || defined(tower32) 16959243Sobrien# ifdef TIOCGWINSZ 17059243Sobrien/* 17159243Sobrien * for struct winsiz 17259243Sobrien */ 17359243Sobrien# include <sys/stream.h> 17459243Sobrien# include <sys/ptem.h> 17559243Sobrien# endif /* TIOCGWINSZ */ 17659243Sobrien# endif /* INTEL || u3b2 || u3b5 || ub15 || u3b20d || ISC || SCO || tower32 */ 177145479Smp#endif /* !glibc && !_VMS_POSIX */ 17859243Sobrien 17959243Sobrien#ifdef IRIS4D 18059243Sobrien# include <sys/time.h> 18159243Sobrien# include <sys/resource.h> 18259243Sobrien#endif /* IRIS4D */ 18359243Sobrien 18459243Sobrien/* 18559243Sobrien * For some versions of system V software, specially ones that use the 18659243Sobrien * Wollongong Software TCP/IP, the FIOCLEX, FIONCLEX, FIONBIO calls 18759243Sobrien * might not work correctly for file descriptors [they work only for 18859243Sobrien * sockets]. So we try to use first the fcntl() and we only use the 18959243Sobrien * ioctl() form, only if we don't have the fcntl() one. 19059243Sobrien * 19159243Sobrien * From: scott@craycos.com (Scott Bolte) 19259243Sobrien */ 19369408Sache#ifndef WINNT_NATIVE 19459243Sobrien# ifdef F_SETFD 195145479Smp# ifndef FD_CLOEXEC 196145479Smp# define FD_CLOEXEC 1 197145479Smp# endif 198145479Smp# define close_on_exec(fd, v) fcntl((fd), F_SETFD, ((v) ? FD_CLOEXEC : 0)) 19959243Sobrien# else /* !F_SETFD */ 20059243Sobrien# ifdef FIOCLEX 20159243Sobrien# define close_on_exec(fd, v) ioctl((fd), ((v) ? FIOCLEX : FIONCLEX), NULL) 20259243Sobrien# else /* !FIOCLEX */ 20359243Sobrien# define close_on_exec(fd, v) /* Nothing */ 20459243Sobrien# endif /* FIOCLEX */ 20559243Sobrien# endif /* F_SETFD */ 20669408Sache#else /* WINNT_NATIVE */ 20759243Sobrien# define close_on_exec(fd, v) nt_close_on_exec((fd),(v)) 20869408Sache#endif /* !WINNT_NATIVE */ 20959243Sobrien 21059243Sobrien/* 21159243Sobrien * Stat 21259243Sobrien */ 21359243Sobrien#ifdef ISC 21459243Sobrien/* these are not defined for _POSIX_SOURCE under ISC 2.2 */ 21559243Sobrien# ifndef S_IFMT 21659243Sobrien# define S_IFMT 0170000 /* type of file */ 21759243Sobrien# define S_IFDIR 0040000 /* directory */ 21859243Sobrien# define S_IFCHR 0020000 /* character special */ 21959243Sobrien# define S_IFBLK 0060000 /* block special */ 22059243Sobrien# define S_IFREG 0100000 /* regular */ 22159243Sobrien# define S_IFIFO 0010000 /* fifo */ 22259243Sobrien# define S_IFNAM 0050000 /* special named file */ 22359243Sobrien# ifndef ISC202 22459243Sobrien# define S_IFLNK 0120000 /* symbolic link */ 22559243Sobrien# endif /* ISC202 */ 22659243Sobrien# endif /* S_IFMT */ 22759243Sobrien#endif /* ISC */ 22859243Sobrien 229145479Smp#ifdef STAT_MACROS_BROKEN 23059243Sobrien# undef S_ISDIR 23159243Sobrien# undef S_ISCHR 23259243Sobrien# undef S_ISBLK 23359243Sobrien# undef S_ISREG 23459243Sobrien# undef S_ISFIFO 23559243Sobrien# undef S_ISNAM 23659243Sobrien# undef S_ISLNK 23759243Sobrien# undef S_ISSOCK 238145479Smp#endif /* STAT_MACROS_BROKEN */ 23959243Sobrien 24059243Sobrien#ifdef S_IFMT 24159243Sobrien# if !defined(S_ISDIR) && defined(S_IFDIR) 24259243Sobrien# define S_ISDIR(a) (((a) & S_IFMT) == S_IFDIR) 24359243Sobrien# endif /* ! S_ISDIR && S_IFDIR */ 24459243Sobrien# if !defined(S_ISCHR) && defined(S_IFCHR) 24559243Sobrien# define S_ISCHR(a) (((a) & S_IFMT) == S_IFCHR) 24659243Sobrien# endif /* ! S_ISCHR && S_IFCHR */ 24759243Sobrien# if !defined(S_ISBLK) && defined(S_IFBLK) 24859243Sobrien# define S_ISBLK(a) (((a) & S_IFMT) == S_IFBLK) 24959243Sobrien# endif /* ! S_ISBLK && S_IFBLK */ 25059243Sobrien# if !defined(S_ISREG) && defined(S_IFREG) 25159243Sobrien# define S_ISREG(a) (((a) & S_IFMT) == S_IFREG) 25259243Sobrien# endif /* ! S_ISREG && S_IFREG */ 25359243Sobrien# if !defined(S_ISFIFO) && defined(S_IFIFO) 25459243Sobrien# define S_ISFIFO(a) (((a) & S_IFMT) == S_IFIFO) 25559243Sobrien# endif /* ! S_ISFIFO && S_IFIFO */ 25659243Sobrien# if !defined(S_ISNAM) && defined(S_IFNAM) 25759243Sobrien# define S_ISNAM(a) (((a) & S_IFMT) == S_IFNAM) 25859243Sobrien# endif /* ! S_ISNAM && S_IFNAM */ 25959243Sobrien# if !defined(S_ISLNK) && defined(S_IFLNK) 26059243Sobrien# define S_ISLNK(a) (((a) & S_IFMT) == S_IFLNK) 26159243Sobrien# endif /* ! S_ISLNK && S_IFLNK */ 26259243Sobrien# if !defined(S_ISSOCK) && defined(S_IFSOCK) 26359243Sobrien# define S_ISSOCK(a) (((a) & S_IFMT) == S_IFSOCK) 26459243Sobrien# endif /* ! S_ISSOCK && S_IFSOCK */ 26559243Sobrien#endif /* S_IFMT */ 26659243Sobrien 26759243Sobrien#ifdef tower32 26859243Sobrien/* The header files lie; we really don't have symlinks */ 26959243Sobrien# undef S_ISLNK 27059243Sobrien# undef S_IFLNK 27159243Sobrien#endif /* tower32 */ 27259243Sobrien 27359243Sobrien#ifndef S_IREAD 27459243Sobrien# define S_IREAD 0000400 27559243Sobrien#endif /* S_IREAD */ 27659243Sobrien#ifndef S_IROTH 27759243Sobrien# define S_IROTH (S_IREAD >> 6) 27859243Sobrien#endif /* S_IROTH */ 27959243Sobrien#ifndef S_IRGRP 28059243Sobrien# define S_IRGRP (S_IREAD >> 3) 28159243Sobrien#endif /* S_IRGRP */ 28259243Sobrien#ifndef S_IRUSR 28359243Sobrien# define S_IRUSR S_IREAD 28459243Sobrien#endif /* S_IRUSR */ 28559243Sobrien 28659243Sobrien#ifndef S_IWRITE 28759243Sobrien# define S_IWRITE 0000200 28859243Sobrien#endif /* S_IWRITE */ 28959243Sobrien#ifndef S_IWOTH 29059243Sobrien# define S_IWOTH (S_IWRITE >> 6) 29159243Sobrien#endif /* S_IWOTH */ 29259243Sobrien#ifndef S_IWGRP 29359243Sobrien# define S_IWGRP (S_IWRITE >> 3) 29459243Sobrien#endif /* S_IWGRP */ 29559243Sobrien#ifndef S_IWUSR 29659243Sobrien# define S_IWUSR S_IWRITE 29759243Sobrien#endif /* S_IWUSR */ 29859243Sobrien 29959243Sobrien#ifndef S_IEXEC 30059243Sobrien# define S_IEXEC 0000100 30159243Sobrien#endif /* S_IEXEC */ 30259243Sobrien#ifndef S_IXOTH 30359243Sobrien# define S_IXOTH (S_IEXEC >> 6) 30459243Sobrien#endif /* S_IXOTH */ 30559243Sobrien#ifndef S_IXGRP 30659243Sobrien# define S_IXGRP (S_IEXEC >> 3) 30759243Sobrien#endif /* S_IXGRP */ 30859243Sobrien#ifndef S_IXUSR 30959243Sobrien# define S_IXUSR S_IEXEC 31059243Sobrien#endif /* S_IXUSR */ 31159243Sobrien 31259243Sobrien#ifndef S_ISUID 31359243Sobrien# define S_ISUID 0004000 /* setuid */ 31459243Sobrien#endif /* S_ISUID */ 31559243Sobrien#ifndef S_ISGID 31659243Sobrien# define S_ISGID 0002000 /* setgid */ 31759243Sobrien#endif /* S_ISGID */ 31859243Sobrien#ifndef S_ISVTX 31959243Sobrien# define S_ISVTX 0001000 /* sticky */ 32059243Sobrien#endif /* S_ISVTX */ 32159243Sobrien#ifndef S_ENFMT 32259243Sobrien# define S_ENFMT S_ISGID /* record locking enforcement flag */ 32359243Sobrien#endif /* S_ENFMT */ 32459243Sobrien 32559243Sobrien/* the following macros are for POSIX conformance */ 32659243Sobrien#ifndef S_IRWXU 32759243Sobrien# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) 32859243Sobrien#endif /* S_IRWXU */ 32959243Sobrien#ifndef S_IRWXG 33059243Sobrien# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) 33159243Sobrien#endif /* S_IRWXG */ 33259243Sobrien#ifndef S_IRWXO 33359243Sobrien# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) 33459243Sobrien#endif /* S_IRWXO */ 33559243Sobrien 33659243Sobrien/* 33759243Sobrien * Access() 33859243Sobrien */ 33959243Sobrien#ifndef F_OK 34059243Sobrien# define F_OK 0 34159243Sobrien#endif /* F_OK */ 34259243Sobrien#ifndef X_OK 34359243Sobrien# define X_OK 1 34459243Sobrien#endif /* X_OK */ 34559243Sobrien#ifndef W_OK 34659243Sobrien# define W_OK 2 34759243Sobrien#endif /* W_OK */ 34859243Sobrien#ifndef R_OK 34959243Sobrien# define R_OK 4 35059243Sobrien#endif /* R_OK */ 35159243Sobrien 35259243Sobrien/* 35359243Sobrien * Open() 35459243Sobrien */ 35559243Sobrien#ifndef O_RDONLY 35659243Sobrien# define O_RDONLY 0 35759243Sobrien#endif /* O_RDONLY */ 35859243Sobrien#ifndef O_WRONLY 35959243Sobrien# define O_WRONLY 1 36059243Sobrien#endif /* O_WRONLY */ 36159243Sobrien#ifndef O_RDWR 36259243Sobrien# define O_RDWR 2 36359243Sobrien#endif /* O_RDWR */ 364232633Smp#ifndef O_TEMPORARY 365232633Smp# define O_TEMPORARY 0 366232633Smp#endif /* O_TEMPORARY */ 367232633Smp#ifndef O_EXCL 368232633Smp# define O_EXCL 0 369232633Smp#endif /* O_EXCL */ 370232633Smp#ifndef O_LARGEFILE 371232633Smp# define O_LARGEFILE 0 372232633Smp#endif /* O_LARGEFILE */ 373232633Smp#ifndef O_CREAT 374232633Smp# define O_CREAT 0 375232633Smp#endif /* O_CREAT */ 37659243Sobrien 37759243Sobrien/* 37859243Sobrien * Lseek() 37959243Sobrien */ 38059243Sobrien#ifndef L_SET 38159243Sobrien# ifdef SEEK_SET 38259243Sobrien# define L_SET SEEK_SET 38359243Sobrien# else /* !SEEK_SET */ 38459243Sobrien# define L_SET 0 38559243Sobrien# endif /* SEEK_SET */ 38659243Sobrien#endif /* L_SET */ 38759243Sobrien#ifndef L_INCR 38859243Sobrien# ifdef SEEK_CUR 38959243Sobrien# define L_INCR SEEK_CUR 39059243Sobrien# else /* !SEEK_CUR */ 39159243Sobrien# define L_INCR 1 39259243Sobrien# endif /* SEEK_CUR */ 39359243Sobrien#endif /* L_INCR */ 39459243Sobrien#ifndef L_XTND 39559243Sobrien# ifdef SEEK_END 39659243Sobrien# define L_XTND SEEK_END 39759243Sobrien# else /* !SEEK_END */ 39859243Sobrien# define L_XTND 2 39959243Sobrien# endif /* SEEK_END */ 40059243Sobrien#endif /* L_XTND */ 40159243Sobrien 402145479Smp#if !defined (HAVE_SETPGID) && !defined (SETPGRP_VOID) 40359243Sobrien# define setpgid(pid, pgrp) setpgrp(pid, pgrp) 404145479Smp#endif 40559243Sobrien 40659243Sobrien#if defined(BSDJOBS) && !(defined(POSIX) && defined(POSIXJOBS)) 40759243Sobrien# define NEEDtcgetpgrp 40859243Sobrien#endif /* BSDJOBS && !(POSIX && POSIXJOBS) */ 40959243Sobrien 41059243Sobrien#ifdef RENO 41159243Sobrien/* 41259243Sobrien * RENO has this broken. It is fixed on 4.4BSD 41359243Sobrien */ 41459243Sobrien# define NEEDtcgetpgrp 41559243Sobrien#endif /* RENO */ 41659243Sobrien 41759243Sobrien#ifdef SXA 41859243Sobrien# ifndef _BSDX_ 41959243Sobrien/* 42059243Sobrien * Only needed in the system V environment. 42159243Sobrien */ 42259243Sobrien# define setrlimit bsd_setrlimit 42359243Sobrien# define getrlimit bsd_getrlimit 42459243Sobrien# endif /* _BSDX_ */ 42559243Sobrien#endif /* SXA */ 42659243Sobrien 42759243Sobrien#if defined(_MINIX) || defined(__EMX__) 42859243Sobrien# define HAVENOLIMIT 42959243Sobrien/* 43059243Sobrien * Minix does not have these, so... 43159243Sobrien */ 43259243Sobrien# define getpgrp getpid 43359243Sobrien#endif /* _MINIX || __EMX__ */ 43459243Sobrien 43559243Sobrien#ifdef __EMX__ 43659243Sobrien/* XXX: How can we get the tty name in emx? */ 43759243Sobrien# define ttyname(fd) (isatty(fd) ? "/dev/tty" : NULL) 43859243Sobrien#endif /* __EMX__ */ 43959243Sobrien 44059243Sobrien#ifndef S_IFLNK 44159243Sobrien# define lstat stat 44259243Sobrien#endif /* S_IFLNK */ 44359243Sobrien 44459243Sobrien 44559243Sobrien#if defined(BSDTIMES) && !defined(_SEQUENT_) 44659243Sobrientypedef struct timeval timeval_t; 44759243Sobrien#endif /* BSDTIMES && ! _SEQUENT_ */ 44859243Sobrien 44959243Sobrien#ifdef NeXT 45059243Sobrien/* 45159243Sobrien * From Tony_Mason@transarc.com, override NeXT's malloc stuff. 45259243Sobrien */ 45359243Sobrien# define malloc tcsh_malloc 45459243Sobrien# define calloc tcsh_calloc 45559243Sobrien# define realloc tcsh_realloc 45659243Sobrien# define free tcsh_free 45759243Sobrien#endif /* NeXT */ 45859243Sobrien 459145479Smp#if defined(HAVE_GETHOSTNAME) && !HAVE_DECL_GETHOSTNAME 460167465Smpextern int gethostname (char *, int); 461145479Smp#endif 46259243Sobrien 463145479Smp#ifndef GETPGRP_VOID 464145479Smp# define mygetpgrp() getpgrp(0) 465145479Smp#else 466145479Smp# define mygetpgrp() getpgrp() 467145479Smp#endif 468145479Smp 46959243Sobrien#if !defined(POSIX) || defined(SUNOS4) || defined(UTekV) || defined(sysV88) 47059243Sobrienextern time_t time(); 47159243Sobrienextern char *getenv(); 47259243Sobrienextern int atoi(); 47359243Sobrien# ifndef __EMX__ 47459243Sobrienextern char *ttyname(); 47559243Sobrien# endif /* __EMX__ */ 47659243Sobrien 477145479Smp 47859243Sobrien# if defined(SUNOS4) 47959243Sobrien# ifndef toupper 480167465Smpextern int toupper (int); 48159243Sobrien# endif /* toupper */ 48259243Sobrien# ifndef tolower 483167465Smpextern int tolower (int); 48459243Sobrien# endif /* tolower */ 485167465Smpextern caddr_t sbrk (int); 48659243Sobrien# else /* !SUNOS4 */ 48769408Sache# ifndef WINNT_NATIVE 488145479Smp# ifdef hpux 48959243Sobrienextern void abort(); 49059243Sobrienextern void qsort(); 49159243Sobrien# endif /* hpux */ 49269408Sache# endif /* !WINNT_NATIVE */ 49359243Sobrien# endif /* SUNOS4 */ 49459243Sobrien#ifndef _CX_UX 49559243Sobrienextern void perror(); 49659243Sobrien#endif 49759243Sobrien 49859243Sobrien# ifdef BSD 49959243Sobrienextern uid_t getuid(), geteuid(); 50059243Sobrienextern gid_t getgid(), getegid(); 50159243Sobrien# endif /* BSD */ 50259243Sobrien 50359243Sobrien# ifdef SYSMALLOC 50459243Sobrienextern memalign_t malloc(); 50559243Sobrienextern memalign_t realloc(); 50659243Sobrienextern memalign_t calloc(); 50759243Sobrienextern void free(); 50859243Sobrien# endif /* SYSMALLOC */ 50959243Sobrien 51059243Sobrien# ifdef BSDJOBS 51159243Sobrien# ifdef BSDTIMES 51259243Sobrien# ifdef __MACHTEN__ 51359243Sobrienextern pid_t wait3(); 51459243Sobrien# endif /* __MACHTEN__ */ 51559243Sobrien# endif /* BSDTIMES */ 51659243Sobrien# endif /* BSDJOBS */ 51759243Sobrien 51859243Sobrien# if (!defined(fps500) && !defined(apollo) && !defined(__lucid) && !defined(HPBSD) && !defined(DECOSF1)) 51959243Sobrienextern void setpwent(); 52059243Sobrienextern void endpwent(); 52159243Sobrien# endif /* !fps500 && !apollo && !__lucid && !HPBSD && !DECOSF1 */ 52259243Sobrien 52359243Sobrien# ifndef __STDC__ 52459243Sobrienextern struct passwd *getpwuid(), *getpwnam(), *getpwent(); 525145479Smp# ifdef HAVE_SHADOW_H 52659243Sobrienextern struct spwd *getspnam(), *getspent(); 527145479Smp# endif /* HAVE_SHADOW_H */ 528167465Smp# if defined(HAVE_AUTH_H) && defined(HAVE_GETAUTHUID) 52959243Sobrienextern struct authorization *getauthuid(); 530167465Smp# endif /* HAVE_AUTH_H && HAVE_GETAUTHUID */ 53159243Sobrien# endif /* __STDC__ */ 53259243Sobrien 53359243Sobrien# ifndef getcwd 53459243Sobrienextern char *getcwd(); 53559243Sobrien# endif /* getcwd */ 53659243Sobrien 53759243Sobrien#else /* POSIX || !SUNOS4 || !UTekV || !sysV88 */ 53859243Sobrien 53959243Sobrien# if (defined(SUNOS4) && !defined(__GNUC__)) || defined(_IBMR2) || defined(_IBMESA) 54059243Sobrienextern char *getvwd(); 54159243Sobrien# endif /* (SUNOS4 && ! __GNUC__) || _IBMR2 || _IBMESA */ 54259243Sobrien 54359243Sobrien# ifdef SCO 54459243Sobrienextern char *ttyname(); 54559243Sobrien# endif /* SCO */ 54659243Sobrien 54759243Sobrien# ifdef __clipper__ 54859243Sobrienextern char *ttyname(); 54959243Sobrien# endif /* __clipper__ */ 55059243Sobrien 55159243Sobrien#endif /* !POSIX || SUNOS4 || UTekV || sysV88 */ 55259243Sobrien 55359243Sobrien#if defined(SUNOS4) && __GNUC__ == 2 55459243Sobrien/* 55559243Sobrien * Somehow these are missing 55659243Sobrien */ 557167465Smpextern int ioctl (int, int, ...); 558167465Smpextern int readlink (const char *, char *, size_t); 559167465Smpextern void setgrent (void); 560167465Smpextern void endgrent (void); 56159243Sobrien# ifdef REMOTEHOST 56259243Sobrien# ifndef _SOCKLEN_T /* Avoid Solaris 2.7 bogosity. */ 56359243Sobrienstruct sockaddr; 564167465Smpextern int getpeername (int, struct sockaddr *, int *); 56559243Sobrien# endif /* _SOCKLEN_T */ 56659243Sobrien# endif /* REMOTEHOST */ 56759243Sobrien#endif /* SUNOS4 && __GNUC__ == 2 */ 56859243Sobrien 56959243Sobrien#if (defined(BSD) && !defined(BSD4_4)) || defined(SUNOS4) 57059243Sobrien# if defined(__alpha) && defined(__osf__) && DECOSF1 < 200 571167465Smpextern void bcopy (const void *, void *, size_t); 57259243Sobrien# define memmove(a, b, c) (bcopy((char *) (b), (char *) (a), (int) (c)), a) 57359243Sobrien# endif /* __alpha && __osf__ && DECOSF1 < 200 */ 57459243Sobrien#endif /* (BSD && !BSD4_4) || SUNOS4 */ 57559243Sobrien 576145479Smp#ifdef SUNOS4 577145479Smp# include <memory.h> /* memset should be declared in <string.h> but isn't */ 578145479Smp#endif /* SUNOS4 */ 57959243Sobrien 58059243Sobrien#if SYSVREL == 4 58159243Sobrien# ifdef REMOTEHOST 58259243Sobrien/* Irix6 defines getpeername(int, void *, int *) which conflicts with 58359243Sobrien the definition below. */ 58469408Sache# if !defined(__sgi) && !defined(_OSD_POSIX) && !defined(__MVS__) 58559243Sobrien# ifndef _SOCKLEN_T /* Avoid Solaris 2.7 bogosity. */ 58659243Sobrienstruct sockaddr; 587167465Smpextern int getpeername (int, struct sockaddr *, int *); 58859243Sobrien# endif /* _SOCKLEN_T */ 58969408Sache# endif /* !__sgi && !_OSD_POSIX && !__MVS__ */ 59059243Sobrien# endif /* REMOTEHOST */ 59159243Sobrien# ifndef BSDTIMES 592167465Smpextern int getrlimit (int, struct rlimit *); 593167465Smpextern int setrlimit (int, const struct rlimit *); 59459243Sobrien# endif /* !BSDTIMES */ 59559243Sobrien# if defined(SOLARIS2) 596167465Smpextern char *strerror (int); 59759243Sobrien# endif /* SOLARIS2 */ 59859243Sobrien#endif /* SYSVREL == 4 */ 59959243Sobrien 60059243Sobrien#if defined(__alpha) && defined(__osf__) && DECOSF1 < 200 60159243Sobrien/* These are ok for 1.3, but conflict with the header files for 2.0 */ 602167465Smpextern char *sbrk (ssize_t); 603167465Smpextern int ioctl (int, unsigned long, char *); 604167465Smpextern pid_t vfork (void); 605167465Smpextern int killpg (pid_t, int); 60659243Sobrien#endif /* __osf__ && __alpha && DECOSF1 < 200 */ 60759243Sobrien 608167465Smp#ifndef va_copy 609167465Smp# ifdef __va_copy 610167465Smp# define va_copy(DEST, SRC) __va_copy(DEST, SRC) 611167465Smp# else 612167465Smp# define va_copy(DEST, SRC) memcpy(&(DEST), &(SRC), sizeof(va_list)) 613167465Smp# endif 614167465Smp#endif 615167465Smp 616232633Smp#if defined(__CYGWIN__) && !defined(NO_CRYPT) 617232633Smpextern char *cygwin_xcrypt(struct passwd *, const char *, const char *); 618232633Smp#endif /* __CYGWIN__ && !NO_CRYPT */ 619232633Smp 62059243Sobrien#endif /* _h_tc_os */ 621