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