138494Sobrien/*
2174299Sobrien * Copyright (c) 1997-2006 Erez Zadok
338494Sobrien * Copyright (c) 1990 Jan-Simon Pendry
438494Sobrien * Copyright (c) 1990 Imperial College of Science, Technology & Medicine
538494Sobrien * Copyright (c) 1990 The Regents of the University of California.
638494Sobrien * All rights reserved.
738494Sobrien *
838494Sobrien * This code is derived from software contributed to Berkeley by
938494Sobrien * Jan-Simon Pendry at Imperial College, London.
1038494Sobrien *
1138494Sobrien * Redistribution and use in source and binary forms, with or without
1238494Sobrien * modification, are permitted provided that the following conditions
1338494Sobrien * are met:
1438494Sobrien * 1. Redistributions of source code must retain the above copyright
1538494Sobrien *    notice, this list of conditions and the following disclaimer.
1638494Sobrien * 2. Redistributions in binary form must reproduce the above copyright
1738494Sobrien *    notice, this list of conditions and the following disclaimer in the
1838494Sobrien *    documentation and/or other materials provided with the distribution.
1938494Sobrien * 3. All advertising materials mentioning features or use of this software
2042633Sobrien *    must display the following acknowledgment:
2138494Sobrien *      This product includes software developed by the University of
2238494Sobrien *      California, Berkeley and its contributors.
2338494Sobrien * 4. Neither the name of the University nor the names of its contributors
2438494Sobrien *    may be used to endorse or promote products derived from this software
2538494Sobrien *    without specific prior written permission.
2638494Sobrien *
2738494Sobrien * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2838494Sobrien * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2938494Sobrien * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
3038494Sobrien * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
3138494Sobrien * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
3238494Sobrien * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
3338494Sobrien * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3438494Sobrien * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
3538494Sobrien * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3638494Sobrien * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3738494Sobrien * SUCH DAMAGE.
3838494Sobrien *
3938494Sobrien *
40174299Sobrien * File: am-utils/include/am_defs.h
41131706Smbr * $Id: am_defs.h,v 1.15.2.16 2004/05/12 15:54:31 ezk Exp $
4251300Sobrien * $FreeBSD$
4338494Sobrien *
4438494Sobrien */
4538494Sobrien
4638494Sobrien/*
4738494Sobrien * Definitions that are not specific to the am-utils package, but
4838494Sobrien * are rather generic, and can be used elsewhere.
4938494Sobrien */
5038494Sobrien
5138494Sobrien#ifndef _AM_DEFS_H
5238494Sobrien#define _AM_DEFS_H
5338494Sobrien
5438494Sobrien/*
5538494Sobrien * Actions to take if ANSI C.
5638494Sobrien */
5738494Sobrien#if STDC_HEADERS
5838494Sobrien# include <string.h>
5938494Sobrien/* for function prototypes */
6038494Sobrien# define P(x) x
6138494Sobrien# define P_void void
6238494Sobrien#else /* not STDC_HEADERS */
6338494Sobrien/* empty function prototypes */
6438494Sobrien# define P(x) ()
6538494Sobrien# define P_void
6638494Sobrien# ifndef HAVE_STRCHR
6738494Sobrien#  define strchr index
6838494Sobrien#  define strrchr rindex
6938494Sobrien# endif /* not HAVE_STRCHR */
7038494Sobrienchar *strchr(), *strrchr(), *strdup();
7138494Sobrien#endif /* not STDC_HEADERS */
7238494Sobrien
7338494Sobrien/*
7451300Sobrien * Handle gcc __attribute__ if available.
7551300Sobrien */
7651300Sobrien#ifndef __attribute__
7751300Sobrien/* This feature is available in gcc versions 2.5 and later.  */
7851300Sobrien# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
7951300Sobrien#  define __attribute__(Spec) /* empty */
8051300Sobrien# endif /* __GNUC__ < 2 ... */
8151300Sobrien/*
8251300Sobrien * The __-protected variants of `format' and `printf' attributes
8351300Sobrien * are accepted by gcc versions 2.6.4 (effectively 2.7) and later.
8451300Sobrien */
8551300Sobrien# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
8651300Sobrien#  define __format__ format
8751300Sobrien#  define __printf__ printf
8851300Sobrien# endif /* __GNUC__ < 2 ... */
8951300Sobrien#endif /* not __attribute__ */
9051300Sobrien
9151300Sobrien/*
9238494Sobrien * How to handle signals of any type
9338494Sobrien */
9438494Sobrien#ifdef HAVE_SYS_WAIT_H
9538494Sobrien# include <sys/wait.h>
9638494Sobrien#endif /* HAVE_SYS_WAIT_H */
9738494Sobrien#ifndef WEXITSTATUS
9838494Sobrien# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
9938494Sobrien#endif /* not WEXITSTATUS */
10038494Sobrien#ifndef WIFEXITED
10138494Sobrien# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
10238494Sobrien#endif /* not WIFEXITED */
10338494Sobrien
10438494Sobrien/*
10538494Sobrien * Actions to take regarding <time.h> and <sys/time.h>.
10638494Sobrien */
10738494Sobrien#if TIME_WITH_SYS_TIME
10838494Sobrien# include <sys/time.h>
109174299Sobrien# ifdef _ALL_SOURCE
110174299Sobrien/*
111174299Sobrien * AIX 5.2 needs struct sigevent from signal.h to be defined, but I
112174299Sobrien * don't want to move the inclusion of signal.h this early into this
113174299Sobrien * file.  Luckily, amd doesn't need the size of this structure in any
114174299Sobrien * other structure that it uses.  So we sidestep it for now.
115174299Sobrien */
116174299Sobrienstruct sigevent;
117174299Sobrien# endif /* _ALL_SOURCE */
11838494Sobrien# include <time.h>
11938494Sobrien#else /* not TIME_WITH_SYS_TIME */
12038494Sobrien# if HAVE_SYS_TIME_H
12138494Sobrien#  include <sys/time.h>
12238494Sobrien# else /* not HAVE_SYS_TIME_H */
12338494Sobrien#  include <time.h>
12438494Sobrien# endif /* not HAVE_SYS_TIME_H */
12538494Sobrien#endif /* not TIME_WITH_SYS_TIME */
12638494Sobrien
12738494Sobrien/*
12838494Sobrien * Actions to take if <machine/endian.h> exists.
12938494Sobrien */
13038494Sobrien#ifdef HAVE_MACHINE_ENDIAN_H
13138494Sobrien# include <machine/endian.h>
13238494Sobrien#endif /* HAVE_MACHINE_ENDIAN_H */
13338494Sobrien
13438494Sobrien/*
13538494Sobrien * Big-endian or little-endian?
13638494Sobrien */
13738494Sobrien#ifdef WORDS_BIGENDIAN
13838494Sobrien# define ARCH_ENDIAN "big"
13938494Sobrien#else /* not WORDS_BIGENDIAN */
14038494Sobrien# define ARCH_ENDIAN "little"
14138494Sobrien#endif /* not WORDS_BIGENDIAN */
14238494Sobrien
14338494Sobrien/*
14438494Sobrien * Actions to take if HAVE_SYS_TYPES_H is defined.
14538494Sobrien */
14638494Sobrien#if HAVE_SYS_TYPES_H
14738494Sobrien# include <sys/types.h>
14838494Sobrien#endif /* HAVE_SYS_TYPES_H */
14938494Sobrien
15038494Sobrien/*
151174299Sobrien * Actions to take if HAVE_LIMITS_H is defined.
152174299Sobrien */
153174299Sobrien#if HAVE_LIMITS_H_H
154174299Sobrien# include <limits.h>
155174299Sobrien#endif /* HAVE_LIMITS_H */
156174299Sobrien
157174299Sobrien/*
15838494Sobrien * Actions to take if HAVE_UNISTD_H is defined.
15938494Sobrien */
16038494Sobrien#if HAVE_UNISTD_H
16138494Sobrien# include <unistd.h>
16238494Sobrien#endif /* HAVE_UNISTD_H */
16338494Sobrien
16438494Sobrien/* after <unistd.h>, check if this is a POSIX.1 system */
16538494Sobrien#ifdef _POSIX_VERSION
16638494Sobrien/* Code for POSIX.1 systems. */
16738494Sobrien#endif /* _POSIX_VERSION */
16838494Sobrien
16938494Sobrien/*
17038494Sobrien * Variable length argument lists.
17138494Sobrien * Must use only one of the two!
17238494Sobrien */
17338494Sobrien#ifdef HAVE_STDARG_H
17438494Sobrien# include <stdarg.h>
17538494Sobrien/*
17638494Sobrien * On Solaris 2.6, <sys/varargs.h> is included in <sys/fs/autofs.h>
17738494Sobrien * So this ensures that only one is included.
17838494Sobrien */
17938494Sobrien# ifndef _SYS_VARARGS_H
18038494Sobrien#  define _SYS_VARARGS_H
18138494Sobrien# endif /* not _SYS_VARARGS_H */
18238494Sobrien#else /* not HAVE_STDARG_H */
18338494Sobrien# ifdef HAVE_VARARGS_H
18438494Sobrien#  include <varargs.h>
18538494Sobrien# endif /* HAVE_VARARGS_H */
18638494Sobrien#endif /* not HAVE_STDARG_H */
18738494Sobrien
18838494Sobrien/*
18938494Sobrien * Pick the right header file and macros for directory processing functions.
19038494Sobrien */
19138494Sobrien#if HAVE_DIRENT_H
19238494Sobrien# include <dirent.h>
19338494Sobrien# define NAMLEN(dirent) strlen((dirent)->d_name)
19438494Sobrien#else /* not HAVE_DIRENT_H */
19538494Sobrien# define dirent direct
19638494Sobrien# define NAMLEN(dirent) (dirent)->d_namlen
19738494Sobrien# if HAVE_SYS_NDIR_H
19838494Sobrien#  include <sys/ndir.h>
19938494Sobrien# endif /* HAVE_SYS_NDIR_H */
20038494Sobrien# if HAVE_SYS_DIR_H
20138494Sobrien#  include <sys/dir.h>
20238494Sobrien# endif /* HAVE_SYS_DIR_H */
20338494Sobrien# if HAVE_NDIR_H
20438494Sobrien#  include <ndir.h>
20538494Sobrien# endif /* HAVE_NDIR_H */
20638494Sobrien#endif /* not HAVE_DIRENT_H */
20738494Sobrien
20838494Sobrien/*
20938494Sobrien * Actions to take if HAVE_FCNTL_H is defined.
21038494Sobrien */
21138494Sobrien#if HAVE_FCNTL_H
212174299Sobrien# ifdef HAVE_LINUX_LOOP_H
213174299Sobrien/* so I can mount large files as loop devices */
214174299Sobrien/* XXX: need to move these two LARGEFILE defines to a better place */
215174299Sobrien#  define _LARGEFILE64_SOURCE
216174299Sobrien#  define __USE_LARGEFILE64
217174299Sobrien# endif /* HAVE_LINUX_LOOP_H */
21838494Sobrien# include <fcntl.h>
21938494Sobrien#endif /* HAVE_FCNTL_H */
22038494Sobrien
22138494Sobrien/*
22238494Sobrien * Actions to take if HAVE_MEMORY_H is defined.
22338494Sobrien */
22438494Sobrien#if HAVE_MEMORY_H
22538494Sobrien# include <memory.h>
22638494Sobrien#endif /* HAVE_MEMORY_H */
22738494Sobrien
22838494Sobrien/*
22938494Sobrien * Actions to take if HAVE_SYS_FILE_H is defined.
23038494Sobrien */
23138494Sobrien#if HAVE_SYS_FILE_H
23238494Sobrien# include <sys/file.h>
23338494Sobrien#endif /* HAVE_SYS_FILE_H */
23438494Sobrien
23538494Sobrien/*
23638494Sobrien * Actions to take if HAVE_SYS_IOCTL_H is defined.
23738494Sobrien */
23838494Sobrien#if HAVE_SYS_IOCTL_H
23938494Sobrien# include <sys/ioctl.h>
24038494Sobrien#endif /* HAVE_SYS_IOCTL_H */
24138494Sobrien
24238494Sobrien/*
24338494Sobrien * Actions to take if HAVE_SYSLOG_H or HAVE_SYS_SYSLOG_H is defined.
24438494Sobrien */
24538494Sobrien#ifdef HAVE_SYSLOG_H
24638494Sobrien# include <syslog.h>
24738494Sobrien#else /* not HAVE_SYSLOG_H */
24838494Sobrien# if HAVE_SYS_SYSLOG_H
24938494Sobrien#  include <sys/syslog.h>
25038494Sobrien# endif /* HAVE_SYS_SYSLOG_H */
25138494Sobrien#endif /* HAVE_SYSLOG_H */
25238494Sobrien
25338494Sobrien/*
25438494Sobrien * Actions to take if <sys/param.h> exists.
25538494Sobrien */
25638494Sobrien#ifdef HAVE_SYS_PARAM_H
25738494Sobrien# include <sys/param.h>
25838494Sobrien#endif /* HAVE_SYS_PARAM_H */
25938494Sobrien
26038494Sobrien/*
26138494Sobrien * Actions to take if <sys/socket.h> exists.
26238494Sobrien */
26338494Sobrien#ifdef HAVE_SYS_SOCKET_H
26438494Sobrien# include <sys/socket.h>
26538494Sobrien#endif /* HAVE_SYS_SOCKET_H */
26638494Sobrien
26738494Sobrien/*
26838494Sobrien * Actions to take if <rpc/rpc.h> exists.
26938494Sobrien */
27038494Sobrien#ifdef HAVE_RPC_RPC_H
27138494Sobrien/*
27238494Sobrien * Turn on PORTMAP, so that additional header files would get included
27338494Sobrien * and the important definition for UDPMSGSIZE is included too.
27438494Sobrien */
27538494Sobrien# ifndef PORTMAP
27638494Sobrien#  define PORTMAP
27738494Sobrien# endif /* not PORTMAP */
27838494Sobrien# include <rpc/rpc.h>
27938494Sobrien# ifndef XDRPROC_T_TYPE
28038494Sobrientypedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...));
28138494Sobrien# endif /* not XDRPROC_T_TYPE */
28238494Sobrien#endif /* HAVE_RPC_RPC_H */
28338494Sobrien
28438494Sobrien/*
28538494Sobrien * Actions to take if <rpc/types.h> exists.
28638494Sobrien */
28738494Sobrien#ifdef HAVE_RPC_TYPES_H
28838494Sobrien# include <rpc/types.h>
28938494Sobrien#endif /* HAVE_RPC_TYPES_H */
29038494Sobrien
29138494Sobrien/*
29238494Sobrien * Actions to take if <rpc/xdr.h> exists.
29338494Sobrien */
29438494Sobrien/* Prevent multiple inclusion on Ultrix 4 */
29538494Sobrien#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__)
29638494Sobrien# include <rpc/xdr.h>
29738494Sobrien#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */
29838494Sobrien
29938494Sobrien/*
30038494Sobrien * Actions to take if <malloc.h> exists.
301131706Smbr * Don't include malloc.h if stdlib.h exists, because modern
302131706Smbr * systems complain if you use malloc.h instead of stdlib.h.
303131706Smbr * XXX: let's hope there are no systems out there that need both.
30438494Sobrien */
305131706Smbr#if defined(HAVE_MALLOC_H) && !defined(HAVE_STDLIB_H)
30638494Sobrien# include <malloc.h>
307131706Smbr#endif /* defined(HAVE_MALLOC_H) && !defined(HAVE_STDLIB_H) */
30838494Sobrien
30938494Sobrien/*
31038494Sobrien * Actions to take if <mntent.h> exists.
31138494Sobrien */
31238494Sobrien#ifdef HAVE_MNTENT_H
31338494Sobrien/* some systems need <stdio.h> before <mntent.h> is included */
31438494Sobrien# ifdef HAVE_STDIO_H
31538494Sobrien#  include <stdio.h>
31638494Sobrien# endif /* HAVE_STDIO_H */
31738494Sobrien# include <mntent.h>
31838494Sobrien#endif /* HAVE_MNTENT_H */
31938494Sobrien
32038494Sobrien/*
32138494Sobrien * Actions to take if <sys/errno.h> exists.
32238494Sobrien */
32338494Sobrien#ifdef HAVE_SYS_ERRNO_H
32438494Sobrien# include <sys/errno.h>
32538494Sobrienextern int errno;
32638494Sobrien#endif /* HAVE_SYS_ERRNO_H */
32738494Sobrien
32838494Sobrien/*
32938494Sobrien * Actions to take if <sys/fsid.h> exists.
33038494Sobrien */
33138494Sobrien#ifdef HAVE_SYS_FSID_H
33238494Sobrien# include <sys/fsid.h>
33338494Sobrien#endif /* HAVE_SYS_FSID_H */
33438494Sobrien
33538494Sobrien/*
33638494Sobrien * Actions to take if <sys/utsname.h> exists.
33738494Sobrien */
33838494Sobrien#ifdef HAVE_SYS_UTSNAME_H
33938494Sobrien# include <sys/utsname.h>
34038494Sobrien#endif /* HAVE_SYS_UTSNAME_H */
34138494Sobrien
34238494Sobrien/*
34338494Sobrien * Actions to take if <sys/mntent.h> exists.
34438494Sobrien */
34538494Sobrien#ifdef HAVE_SYS_MNTENT_H
34638494Sobrien# include <sys/mntent.h>
34738494Sobrien#endif /* HAVE_SYS_MNTENT_H */
34838494Sobrien
34938494Sobrien/*
35051300Sobrien * Actions to take if <ndbm.h> or <db1/ndbm.h> exist.
35138494Sobrien * Should be included before <rpcsvc/yp_prot.h> because on some systems
35238494Sobrien * like Linux, it also defines "struct datum".
35338494Sobrien */
354131706Smbr#ifdef HAVE_MAP_NDBM
355131706Smbr# include NEW_DBM_H
35638494Sobrien# ifndef DATUM
35738494Sobrien/* ensure that struct datum is not included again from <rpcsvc/yp_prot.h> */
35838494Sobrien#  define DATUM
35938494Sobrien# endif /* not DATUM */
360131706Smbr#endif /* HAVE_MAP_NDBM */
36138494Sobrien
36238494Sobrien/*
36338494Sobrien * Actions to take if <net/errno.h> exists.
36438494Sobrien */
36538494Sobrien#ifdef HAVE_NET_ERRNO_H
36638494Sobrien# include <net/errno.h>
36738494Sobrien#endif /* HAVE_NET_ERRNO_H */
36838494Sobrien
36938494Sobrien/*
370174299Sobrien * Actions to take if <net/if.h> exists.
371174299Sobrien */
372174299Sobrien#ifdef HAVE_NET_IF_H
373174299Sobrien# include <net/if.h>
374174299Sobrien#endif /* HAVE_NET_IF_H */
375174299Sobrien
376174299Sobrien/*
37751300Sobrien * Actions to take if <net/route.h> exists.
37838494Sobrien */
37938494Sobrien#ifdef HAVE_NET_ROUTE_H
38038494Sobrien# include <net/route.h>
38138494Sobrien#endif /* HAVE_NET_ROUTE_H */
38238494Sobrien
38338494Sobrien/*
38451300Sobrien * Actions to take if <sys/mbuf.h> exists.
38538494Sobrien */
38638494Sobrien#ifdef HAVE_SYS_MBUF_H
38738494Sobrien# include <sys/mbuf.h>
38838494Sobrien/*
38951300Sobrien * OSF4 (DU-4.0) defines m_next and m_data also in <sys/mount.h> so I must
39038494Sobrien # undefine them here to avoid conflicts.
39138494Sobrien */
39238494Sobrien# ifdef m_next
39338494Sobrien#  undef m_next
39438494Sobrien# endif /* m_next */
39538494Sobrien# ifdef m_data
39638494Sobrien#  undef m_data
39738494Sobrien# endif /* m_data */
39838494Sobrien/*
39951300Sobrien * AIX 3 defines MFREE and m_flags also in <sys/mount.h>.
40038494Sobrien */
40138494Sobrien# ifdef m_flags
40238494Sobrien#  undef m_flags
40338494Sobrien# endif /* m_flags */
40438494Sobrien# ifdef MFREE
40538494Sobrien#  undef MFREE
40638494Sobrien# endif /* MFREE */
40738494Sobrien#endif /* HAVE_SYS_MBUF_H */
40838494Sobrien
40938494Sobrien/*
410174299Sobrien * Actions to take if <sys/mman.h> exists.
41138494Sobrien */
412174299Sobrien#ifdef HAVE_SYS_MMAN_H
413174299Sobrien# include <sys/mman.h>
414174299Sobrien#endif /* HAVE_SYS_MMAN_H */
41538494Sobrien
41638494Sobrien/*
41738494Sobrien * Actions to take if <netdb.h> exists.
41838494Sobrien */
41938494Sobrien#ifdef HAVE_NETDB_H
42038494Sobrien# include <netdb.h>
42138494Sobrien#endif /* HAVE_NETDB_H */
42238494Sobrien
42338494Sobrien/*
42438494Sobrien * Actions to take if <netdir.h> exists.
42538494Sobrien */
42638494Sobrien#ifdef HAVE_NETDIR_H
42738494Sobrien# include <netdir.h>
42838494Sobrien#endif /* HAVE_NETDIR_H */
42938494Sobrien
43038494Sobrien/*
43138494Sobrien * Actions to take if <net/if_var.h> exists.
43238494Sobrien */
43338494Sobrien#ifdef HAVE_NET_IF_VAR_H
43438494Sobrien# include <net/if_var.h>
43538494Sobrien#endif /* HAVE_NET_IF_VAR_H */
43638494Sobrien
43738494Sobrien/*
43838494Sobrien * Actions to take if <netinet/if_ether.h> exists.
43938494Sobrien */
44038494Sobrien#ifdef HAVE_NETINET_IF_ETHER_H
44138494Sobrien# include <netinet/if_ether.h>
44238494Sobrien#endif /* HAVE_NETINET_IF_ETHER_H */
44338494Sobrien
44438494Sobrien/*
44538494Sobrien * Actions to take if <netinet/in.h> exists.
44638494Sobrien */
44738494Sobrien#ifdef HAVE_NETINET_IN_H
44838494Sobrien# include <netinet/in.h>
44938494Sobrien#endif /* HAVE_NETINET_IN_H */
45038494Sobrien
45138494Sobrien/*
45238494Sobrien * Actions to take if <rpcsvc/yp_prot.h> exists.
45338494Sobrien */
45438494Sobrien#ifdef HAVE_RPCSVC_YP_PROT_H
45542633Sobrien# ifdef HAVE_BAD_HEADERS
45642633Sobrien/* avoid circular dependency in aix 4.3 with <rpcsvc/ypclnt.h> */
45742633Sobrienstruct ypall_callback;
45842633Sobrien# endif /* HAVE_BAD_HEADERS */
45938494Sobrien# include <rpcsvc/yp_prot.h>
46038494Sobrien#endif /* HAVE_RPCSVC_YP_PROT_H */
46138494Sobrien
46238494Sobrien/*
46338494Sobrien * Actions to take if <rpcsvc/ypclnt.h> exists.
46438494Sobrien */
46538494Sobrien#ifdef HAVE_RPCSVC_YPCLNT_H
46638494Sobrien# include <rpcsvc/ypclnt.h>
46738494Sobrien#endif /* HAVE_RPCSVC_YPCLNT_H */
46838494Sobrien
46938494Sobrien/*
47038494Sobrien * Actions to take if <sys/ucred.h> exists.
47138494Sobrien */
47238494Sobrien#ifdef HAVE_SYS_UCRED_H
47338494Sobrien# include <sys/ucred.h>
47438494Sobrien#endif /* HAVE_SYS_UCRED_H */
47538494Sobrien
47638494Sobrien
47738494Sobrien/*
47838494Sobrien * Actions to take if <sys/mount.h> exists.
47938494Sobrien */
48038494Sobrien#ifdef HAVE_SYS_MOUNT_H
48138494Sobrien/*
48238494Sobrien * Some operating systems must define these variables to get
48338494Sobrien * NFS and other definitions included.
48438494Sobrien */
48538494Sobrien# ifndef NFSCLIENT
48682805Sobrien#  define NFSCLIENT 1
48738494Sobrien# endif /* not NFSCLIENT */
48838494Sobrien# ifndef NFS
48982805Sobrien#  define NFS 1
49038494Sobrien# endif /* not NFS */
49138494Sobrien# ifndef PCFS
49282805Sobrien#  define PCFS 1
49338494Sobrien# endif /* not PCFS */
49438494Sobrien# ifndef LOFS
49582805Sobrien#  define LOFS 1
49638494Sobrien# endif /* not LOFS */
49738494Sobrien# ifndef RFS
49882805Sobrien#  define RFS 1
49938494Sobrien# endif /* not RFS */
50038494Sobrien# ifndef MSDOSFS
50182805Sobrien#  define MSDOSFS 1
50238494Sobrien# endif /* not MSDOSFS */
50338494Sobrien# ifndef MFS
50482805Sobrien#  define MFS 1
50538494Sobrien# endif /* not MFS */
50638494Sobrien# ifndef CD9660
50782805Sobrien#  define CD9660 1
50838494Sobrien# endif /* not CD9660 */
50938494Sobrien# include <sys/mount.h>
51038494Sobrien#endif /* HAVE_SYS_MOUNT_H */
51138494Sobrien
51238494Sobrien#ifdef HAVE_SYS_VMOUNT_H
51338494Sobrien# include <sys/vmount.h>
51438494Sobrien#endif /* HAVE_SYS_VMOUNT_H */
51538494Sobrien
51638494Sobrien/*
51738494Sobrien * Actions to take if <linux/fs.h> exists.
51882805Sobrien * There is no point in including this on a glibc2 system,
51982805Sobrien * we're only asking for trouble
52038494Sobrien */
52182805Sobrien#if defined HAVE_LINUX_FS_H && (!defined __GLIBC__ || __GLIBC__ < 2)
52238494Sobrien/*
52351300Sobrien * There are various conflicts in definitions between RedHat Linux, newer
52451300Sobrien * 2.2 kernels, and <netinet/in.h> and <linux/fs.h>.
52538494Sobrien */
52638494Sobrien# ifdef HAVE_SOCKETBITS_H
52738494Sobrien/* conflicts with <socketbits.h> */
52838494Sobrien#  define _LINUX_SOCKET_H
52938494Sobrien#  undef BLKFLSBUF
53038494Sobrien#  undef BLKGETSIZE
53138494Sobrien#  undef BLKRAGET
53238494Sobrien#  undef BLKRASET
53338494Sobrien#  undef BLKROGET
53438494Sobrien#  undef BLKROSET
53538494Sobrien#  undef BLKRRPART
53638494Sobrien#  undef MS_MGC_VAL
53738494Sobrien#  undef MS_RMT_MASK
53851300Sobrien#  if defined(__GLIBC__) && __GLIBC__ >= 2
53938494Sobrien/* conflicts with <waitflags.h> */
54051300Sobrien#   undef WNOHANG
54151300Sobrien#   undef WUNTRACED
54251300Sobrien#  endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */
54338494Sobrien/* conflicts with <statfsbuf.h> */
54438494Sobrien#  define _SYS_STATFS_H
54538494Sobrien# endif /* HAVE_SOCKETBITS_H */
54651300Sobrien
54751300Sobrien# ifdef _SYS_WAIT_H
54851300Sobrien#  if defined(__GLIBC__) && __GLIBC__ >= 2
54951300Sobrien/* conflicts with <bits/waitflags.h> (RedHat/Linux 6.0 and kernels 2.2 */
55051300Sobrien#   undef WNOHANG
55151300Sobrien#   undef WUNTRACED
55251300Sobrien#  endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */
55351300Sobrien# endif /* _SYS_WAIT_H */
55451300Sobrien
55541145Sobrien# ifdef HAVE_LINUX_POSIX_TYPES_H
55641145Sobrien#  include <linux/posix_types.h>
55741145Sobrien# endif /* HAVE_LINUX_POSIX_TYPES_H */
55841145Sobrien# ifndef _LINUX_BYTEORDER_GENERIC_H
55941145Sobrien#  define _LINUX_BYTEORDER_GENERIC_H
56041145Sobrien# endif /* _LINUX_BYTEORDER_GENERIC_H */
56151300Sobrien/* conflicts with <sys/mount.h> in 2.[12] kernels */
56241145Sobrien# ifdef _SYS_MOUNT_H
56351300Sobrien#  undef BLKFLSBUF
56451300Sobrien#  undef BLKGETSIZE
56551300Sobrien#  undef BLKRAGET
56651300Sobrien#  undef BLKRASET
56751300Sobrien#  undef BLKROGET
56851300Sobrien#  undef BLKROSET
56951300Sobrien#  undef BLKRRPART
57051300Sobrien#  undef BLOCK_SIZE
57151300Sobrien#  undef MS_MANDLOCK
57251300Sobrien#  undef MS_MGC_VAL
57351300Sobrien#  undef MS_NOATIME
57451300Sobrien#  undef MS_NODEV
57551300Sobrien#  undef MS_NODIRATIME
57651300Sobrien#  undef MS_NOEXEC
57751300Sobrien#  undef MS_NOSUID
57851300Sobrien#  undef MS_RDONLY
57951300Sobrien#  undef MS_REMOUNT
58051300Sobrien#  undef MS_RMT_MASK
58151300Sobrien#  undef MS_SYNCHRONOUS
58251300Sobrien#  undef S_APPEND
58351300Sobrien#  undef S_IMMUTABLE
58451300Sobrien/* conflicts with <statfsbuf.h> */
58551300Sobrien#  define _SYS_STATFS_H
58641145Sobrien# endif /* _SYS_MOUNT_H */
58782805Sobrien# ifndef _LINUX_STRING_H_
58882805Sobrien#  define _LINUX_STRING_H_
58982805Sobrien# endif /* not _LINUX_STRING_H_ */
59082805Sobrien# ifdef HAVE_LINUX_KDEV_T_H
59182805Sobrien#  define __KERNEL__
59282805Sobrien#  include <linux/kdev_t.h>
59382805Sobrien#  undef __KERNEL__
59482805Sobrien# endif /* HAVE_LINUX_KDEV_T_H */
59582805Sobrien# ifdef HAVE_LINUX_LIST_H
59682805Sobrien#  define __KERNEL__
59782805Sobrien#  include <linux/list.h>
59882805Sobrien#  undef __KERNEL__
59982805Sobrien# endif /* HAVE_LINUX_LIST_H */
60038494Sobrien# include <linux/fs.h>
60182805Sobrien#endif /* HAVE_LINUX_FS_H && (!__GLIBC__ || __GLIBC__ < 2) */
60238494Sobrien
60338494Sobrien#ifdef HAVE_CDFS_CDFS_MOUNT_H
60438494Sobrien# include <cdfs/cdfs_mount.h>
60538494Sobrien#endif /* HAVE_CDFS_CDFS_MOUNT_H */
60638494Sobrien
60738494Sobrien#ifdef HAVE_CDFS_CDFSMOUNT_H
60838494Sobrien# include <cdfs/cdfsmount.h>
60938494Sobrien#endif /* HAVE_CDFS_CDFSMOUNT_H */
61038494Sobrien
61138494Sobrien/*
612174299Sobrien * Actions to take if <linux/loop.h> exists.
613174299Sobrien */
614174299Sobrien#ifdef HAVE_LINUX_LOOP_H
615174299Sobrien# ifdef HAVE_LINUX_POSIX_TYPES_H
616174299Sobrien#  include <linux/posix_types.h>
617174299Sobrien# endif /* HAVE_LINUX_POSIX_TYPES_H */
618174299Sobrien/* next dev_t lines needed due to changes in kernel code */
619174299Sobrien# undef dev_t
620174299Sobrien# define dev_t unsigned short	/* compatible with Red Hat and SuSE */
621174299Sobrien# include <linux/loop.h>
622174299Sobrien#endif /* HAVE_LINUX_LOOP_H */
623174299Sobrien
624174299Sobrien/*
625174299Sobrien * AUTOFS PROTOCOL HEADER FILES:
626174299Sobrien */
627174299Sobrien
628174299Sobrien/*
629174299Sobrien * Actions to take if <linux/auto_fs[4].h> exists.
63082805Sobrien * We really don't want <linux/fs.h> pulled in here
63138494Sobrien */
63282805Sobrien#ifndef _LINUX_FS_H
63382805Sobrien#define _LINUX_FS_H
63482805Sobrien#endif /* _LINUX_FS_H */
635174299Sobrien#ifdef HAVE_LINUX_AUTO_FS4_H
636174299Sobrien# include <linux/auto_fs4.h>
637174299Sobrien#else  /* not HAVE_LINUX_AUTO_FS4_H */
638174299Sobrien# ifdef HAVE_LINUX_AUTO_FS_H
639174299Sobrien#  include <linux/auto_fs.h>
640174299Sobrien# endif /* HAVE_LINUX_AUTO_FS_H */
641174299Sobrien#endif /* not HAVE_LINUX_AUTO_FS4_H */
64238494Sobrien
64338494Sobrien/*
644174299Sobrien * Actions to take if <sys/fs/autofs.h> exists.
645174299Sobrien */
646174299Sobrien#ifdef HAVE_SYS_FS_AUTOFS_H
647174299Sobrien# include <sys/fs/autofs.h>
648174299Sobrien#endif /* HAVE_SYS_FS_AUTOFS_H */
649174299Sobrien
650174299Sobrien/*
651174299Sobrien * Actions to take if <rpcsvc/autofs_prot.h> or <sys/fs/autofs_prot.h> exist.
652174299Sobrien */
653174299Sobrien#ifdef HAVE_RPCSVC_AUTOFS_PROT_H
654174299Sobrien# include <rpcsvc/autofs_prot.h>
655174299Sobrien#else  /* not HAVE_RPCSVC_AUTOFS_PROT_H */
656174299Sobrien# ifdef HAVE_SYS_FS_AUTOFS_PROT_H
657174299Sobrien#  include <sys/fs/autofs_prot.h>
658174299Sobrien# endif /* HAVE_SYS_FS_AUTOFS_PROT_H */
659174299Sobrien#endif /* not HAVE_RPCSVC_AUTOFS_PROT_H */
660174299Sobrien
661174299Sobrien/*
662174299Sobrien * Actions to take if <lber.h> exists.
663174299Sobrien * This header file is required before <ldap.h> can be included.
664174299Sobrien */
665174299Sobrien#ifdef HAVE_LBER_H
666174299Sobrien# include <lber.h>
667174299Sobrien#endif /* HAVE_LBER_H */
668174299Sobrien
669174299Sobrien/*
670174299Sobrien * Actions to take if <ldap.h> exists.
671174299Sobrien */
672174299Sobrien#ifdef HAVE_LDAP_H
673174299Sobrien# include <ldap.h>
674174299Sobrien#endif /* HAVE_LDAP_H */
675174299Sobrien
676174299Sobrien/****************************************************************************
677174299Sobrien ** IMPORTANT!!!							   **
678174299Sobrien ** We always include am-utils' amu_autofs_prot.h.			   **
679174299Sobrien ** That is actually defined in "conf/autofs/autofs_${autofs_style}.h"     **
680174299Sobrien ****************************************************************************/
681174299Sobrien#include <amu_autofs_prot.h>
682174299Sobrien
683174299Sobrien
684174299Sobrien/*
68538494Sobrien * NFS PROTOCOL HEADER FILES:
68638494Sobrien */
68738494Sobrien
68838494Sobrien/*
68938494Sobrien * Actions to take if <nfs/export.h> exists.
69038494Sobrien */
69138494Sobrien#ifdef HAVE_NFS_EXPORT_H
69238494Sobrien# include <nfs/export.h>
69338494Sobrien#endif /* HAVE_NFS_EXPORT_H */
69438494Sobrien
69538494Sobrien/****************************************************************************
69638494Sobrien ** IMPORTANT!!!							   **
697174299Sobrien ** We always include am-utils' amu_nfs_prot.h.				   **
69838494Sobrien ** That is actually defined in "conf/nfs_prot/nfs_prot_${host_os_name}.h" **
69938494Sobrien ****************************************************************************/
70038494Sobrien#include <amu_nfs_prot.h>
70138494Sobrien
70238494Sobrien/*
70338494Sobrien * DO NOT INCLUDE THESE FILES:
70438494Sobrien * They conflicts with other NFS headers and are generally not needed.
70538494Sobrien */
70638494Sobrien#ifdef DO_NOT_INCLUDE
70738494Sobrien# ifdef HAVE_NFS_NFS_CLNT_H
70838494Sobrien#  include <nfs/nfs_clnt.h>
70938494Sobrien# endif /* HAVE_NFS_NFS_CLNT_H */
71038494Sobrien# ifdef HAVE_LINUX_NFS_H
71138494Sobrien#  include <linux/nfs.h>
71238494Sobrien# endif /* HAVE_LINUX_NFS_H */
71338494Sobrien#endif /* DO NOT INCLUDE */
71438494Sobrien
71538494Sobrien/*
71638494Sobrien * Actions to take if one of the nfs headers exists.
71738494Sobrien */
71838494Sobrien#ifdef HAVE_NFS_NFS_GFS_H
71938494Sobrien# include <nfs/nfs_gfs.h>
72038494Sobrien#endif /* HAVE_NFS_NFS_GFS_H */
72138494Sobrien#ifdef HAVE_NFS_MOUNT_H
72238494Sobrien# include <nfs/mount.h>
72338494Sobrien#endif /* HAVE_NFS_MOUNT_H */
72438494Sobrien#ifdef HAVE_NFS_NFS_MOUNT_H_off
72582805Sobrien/* broken on nextstep3 (includes non-existing headers) */
72638494Sobrien# include <nfs/nfs_mount.h>
72738494Sobrien#endif /* HAVE_NFS_NFS_MOUNT_H */
72838494Sobrien#ifdef HAVE_NFS_PATHCONF_H
72938494Sobrien# include <nfs/pathconf.h>
73038494Sobrien#endif /* HAVE_NFS_PATHCONF_H */
73138494Sobrien#ifdef HAVE_SYS_FS_NFS_MOUNT_H
73238494Sobrien# include <sys/fs/nfs/mount.h>
73338494Sobrien#endif /* HAVE_SYS_FS_NFS_MOUNT_H */
73438494Sobrien#ifdef HAVE_SYS_FS_NFS_NFS_CLNT_H
73538494Sobrien# include <sys/fs/nfs/nfs_clnt.h>
73638494Sobrien#endif /* HAVE_SYS_FS_NFS_NFS_CLNT_H */
73738494Sobrien#ifdef HAVE_SYS_FS_NFS_CLNT_H
73838494Sobrien# include <sys/fs/nfs_clnt.h>
73938494Sobrien#endif /* HAVE_SYS_FS_NFS_CLNT_H */
740174299Sobrien
741174299Sobrien/* complex rules for linux/nfs_mount.h: broken on so many systems */
74238494Sobrien#ifdef HAVE_LINUX_NFS_MOUNT_H
743174299Sobrien# ifndef _LINUX_NFS_H
744174299Sobrien#  define _LINUX_NFS_H
745174299Sobrien# endif /* not _LINUX_NFS_H */
746174299Sobrien# ifndef _LINUX_NFS2_H
747174299Sobrien#  define _LINUX_NFS2_H
748174299Sobrien# endif /* not _LINUX_NFS2_H */
749174299Sobrien# ifndef _LINUX_NFS3_H
750174299Sobrien#  define _LINUX_NFS3_H
751174299Sobrien# endif /* not _LINUX_NFS3_H */
752174299Sobrien# ifndef _LINUX_NFS_FS_H
753174299Sobrien#  define _LINUX_NFS_FS_H
754174299Sobrien# endif /* not _LINUX_NFS_FS_H */
755174299Sobrien# ifndef _LINUX_IN_H
756174299Sobrien#  define _LINUX_IN_H
757174299Sobrien# endif /* not _LINUX_IN_H */
758174299Sobrien# ifndef __KERNEL__
759174299Sobrien#  define __KERNEL__
760174299Sobrien# endif /* __KERNEL__ */
76138494Sobrien# include <linux/nfs_mount.h>
762174299Sobrien# undef __KERNEL__
76338494Sobrien#endif /* HAVE_LINUX_NFS_MOUNT_H */
76438494Sobrien
76538494Sobrien/*
76638494Sobrien * Actions to take if <pwd.h> exists.
76738494Sobrien */
76838494Sobrien#ifdef HAVE_PWD_H
76938494Sobrien# include <pwd.h>
77038494Sobrien#endif /* HAVE_PWD_H */
77138494Sobrien
77238494Sobrien/*
77338494Sobrien * Actions to take if <hesiod.h> exists.
77438494Sobrien */
77538494Sobrien#ifdef HAVE_HESIOD_H
77638494Sobrien# include <hesiod.h>
77738494Sobrien#endif /* HAVE_HESIOD_H */
77838494Sobrien
77938494Sobrien/*
78038494Sobrien * Actions to take if <arpa/nameser.h> exists.
78138494Sobrien * Should be included before <resolv.h>.
78238494Sobrien */
78338494Sobrien#ifdef HAVE_ARPA_NAMESER_H
78438494Sobrien# ifdef NOERROR
78538494Sobrien#  undef NOERROR
78638494Sobrien# endif /* NOERROR */
78738494Sobrien/*
78838494Sobrien * Conflicts with <sys/tpicommon.h> which is included from <sys/tiuser.h>
78938494Sobrien * on Solaris 2.6 systems.  So undefine it first.
79038494Sobrien */
79138494Sobrien# ifdef T_UNSPEC
79238494Sobrien#  undef T_UNSPEC
79338494Sobrien# endif /* T_UNSPEC */
79438494Sobrien# include <arpa/nameser.h>
79538494Sobrien#endif /* HAVE_ARPA_NAMESER_H */
79638494Sobrien
79738494Sobrien/*
79838494Sobrien * Actions to take if <arpa/inet.h> exists.
79938494Sobrien */
80038494Sobrien#ifdef HAVE_ARPA_INET_H
80142633Sobrien# ifdef HAVE_BAD_HEADERS
80242633Sobrien/* aix 4.3: avoid including <net/if_dl.h> */
80342633Sobrienstruct sockaddr_dl;
80442633Sobrien# endif /* HAVE_BAD_HEADERS */
80538494Sobrien# include <arpa/inet.h>
80638494Sobrien#endif /* HAVE_ARPA_INET_H */
80738494Sobrien
80838494Sobrien/*
80938494Sobrien * Actions to take if <resolv.h> exists.
81038494Sobrien */
81138494Sobrien#ifdef HAVE_RESOLV_H
812174299Sobrien/*
813174299Sobrien * On AIX 5.2, both <resolv.h> and <arpa/nameser_compat.h> define MAXDNAME,
814174299Sobrien * if compiling with gcc -D_USE_IRS (so that we get extern definitions for
815174299Sobrien * hstrerror() and others).
816174299Sobrien */
817174299Sobrien# if defined(_AIX) && defined(MAXDNAME) && defined(_USE_IRS)
818174299Sobrien#  undef MAXDNAME
819174299Sobrien# endif /* defined(_AIX) && defined(MAXDNAME) && defined(_USE_IRS) */
82038494Sobrien# include <resolv.h>
82138494Sobrien#endif /* HAVE_RESOLV_H */
82238494Sobrien
82338494Sobrien/*
82438494Sobrien * Actions to take if <sys/uio.h> exists.
82538494Sobrien */
82638494Sobrien#ifdef HAVE_SYS_UIO_H
82738494Sobrien# include <sys/uio.h>
82838494Sobrien#endif /* HAVE_SYS_UIO_H */
82938494Sobrien
83038494Sobrien/*
83138494Sobrien * Actions to take if <sys/fs/cachefs_fs.h> exists.
83238494Sobrien */
83338494Sobrien#ifdef HAVE_SYS_FS_CACHEFS_FS_H
83438494Sobrien# include <sys/fs/cachefs_fs.h>
83538494Sobrien#endif /* HAVE_SYS_FS_CACHEFS_FS_H */
83638494Sobrien
83738494Sobrien/*
83838494Sobrien * Actions to take if <sys/fs/pc_fs.h> exists.
83938494Sobrien */
84038494Sobrien#ifdef HAVE_SYS_FS_PC_FS_H
84138494Sobrien# include <sys/fs/pc_fs.h>
84238494Sobrien#endif /* HAVE_SYS_FS_PC_FS_H */
84338494Sobrien
84438494Sobrien/*
84538494Sobrien * Actions to take if <msdosfs/msdosfsmount.h> exists.
84638494Sobrien */
84738494Sobrien#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H
84838494Sobrien# include <msdosfs/msdosfsmount.h>
84982805Sobrien#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */
85082805Sobrien#ifdef HAVE_FS_MSDOSFS_MSDOSFSMOUNT_H
85182805Sobrien# include <fs/msdosfs/msdosfsmount.h>
85282805Sobrien#endif /* HAVE_FS_MSDOSFS_MSDOSFSMOUNT_H */
85338494Sobrien
85438494Sobrien/*
855174299Sobrien * Actions to take if <fs/msdosfs/msdosfsmount.h> exists.
856174299Sobrien */
857174299Sobrien#ifdef HAVE_FS_MSDOSFS_MSDOSFSMOUNT_H
858174299Sobrien# include <fs/msdosfs/msdosfsmount.h>
859174299Sobrien#endif /* HAVE_FS_MSDOSFS_MSDOSFSMOUNT_H */
860174299Sobrien
861174299Sobrien/*
86238494Sobrien * Actions to take if <sys/fs/tmp.h> exists.
86338494Sobrien */
86438494Sobrien#ifdef HAVE_SYS_FS_TMP_H
86538494Sobrien# include <sys/fs/tmp.h>
86638494Sobrien#endif /* HAVE_SYS_FS_TMP_H */
86738494Sobrien
86838494Sobrien/*
86938494Sobrien * Actions to take if <sys/fs/ufs_mount.h> exists.
87038494Sobrien */
87138494Sobrien#ifdef HAVE_SYS_FS_UFS_MOUNT_H
87238494Sobrien# include <sys/fs/ufs_mount.h>
87338494Sobrien#endif /* HAVE_SYS_FS_UFS_MOUNT_H */
87482815Sobrien/*
87582815Sobrien * HAVE_UFS_UFS_UFSMOUNT_H should NOT be defined on netbsd/openbsd because it
87682815Sobrien * causes errors with other header files.  Instead, add it to the specific
87782815Sobrien * conf/nfs_prot_*.h file.
87882815Sobrien */
87982815Sobrien#ifdef	HAVE_UFS_UFS_UFSMOUNT_H
88051300Sobrien# include <ufs/ufs/ufsmount.h>
88151300Sobrien#endif	/* HAVE_UFS_UFS_UFSMOUNT_H */
88238494Sobrien
88338494Sobrien/*
88438494Sobrien * Actions to take if <sys/fs/efs_clnt.h> exists.
88538494Sobrien */
88638494Sobrien#ifdef HAVE_SYS_FS_EFS_CLNT_H
88738494Sobrien# include <sys/fs/efs_clnt.h>
88838494Sobrien#endif /* HAVE_SYS_FS_EFS_CLNT_H */
88938494Sobrien
89038494Sobrien/*
89138494Sobrien * Actions to take if <sys/fs/xfs_clnt.h> exists.
89238494Sobrien */
89338494Sobrien#ifdef HAVE_SYS_FS_XFS_CLNT_H
89438494Sobrien# include <sys/fs/xfs_clnt.h>
89538494Sobrien#endif /* HAVE_SYS_FS_XFS_CLNT_H */
89638494Sobrien
89738494Sobrien/*
89838494Sobrien * Actions to take if <assert.h> exists.
89938494Sobrien */
90038494Sobrien#ifdef HAVE_ASSERT_H
90138494Sobrien# include <assert.h>
90238494Sobrien#endif /* HAVE_ASSERT_H */
90338494Sobrien
90438494Sobrien/*
90538494Sobrien * Actions to take if <cfs.h> exists.
90638494Sobrien */
90738494Sobrien#ifdef HAVE_CFS_H
90838494Sobrien# include <cfs.h>
90938494Sobrien#endif /* HAVE_CFS_H */
91038494Sobrien
91138494Sobrien/*
91238494Sobrien * Actions to take if <cluster.h> exists.
91338494Sobrien */
91438494Sobrien#ifdef HAVE_CLUSTER_H
91538494Sobrien# include <cluster.h>
91638494Sobrien#endif /* HAVE_CLUSTER_H */
91738494Sobrien
91838494Sobrien/*
91938494Sobrien * Actions to take if <ctype.h> exists.
92038494Sobrien */
92138494Sobrien#ifdef HAVE_CTYPE_H
92238494Sobrien# include <ctype.h>
92338494Sobrien#endif /* HAVE_CTYPE_H */
92438494Sobrien
92538494Sobrien/*
92638494Sobrien * Actions to take if <errno.h> exists.
92738494Sobrien */
92838494Sobrien#ifdef HAVE_ERRNO_H
92938494Sobrien# include <errno.h>
93038494Sobrien#endif /* HAVE_ERRNO_H */
93138494Sobrien
93238494Sobrien/*
93338494Sobrien * Actions to take if <grp.h> exists.
93438494Sobrien */
93538494Sobrien#ifdef HAVE_GRP_H
93638494Sobrien# include <grp.h>
93738494Sobrien#endif /* HAVE_GRP_H */
93838494Sobrien
93938494Sobrien/*
94038494Sobrien * Actions to take if <hsfs/hsfs.h> exists.
94138494Sobrien */
94238494Sobrien#ifdef HAVE_HSFS_HSFS_H
94338494Sobrien# include <hsfs/hsfs.h>
94438494Sobrien#endif /* HAVE_HSFS_HSFS_H */
94538494Sobrien
94638494Sobrien/*
94738494Sobrien * Actions to take if <cdfs/cdfsmount.h> exists.
94838494Sobrien */
94938494Sobrien#ifdef HAVE_CDFS_CDFSMOUNT_H
95038494Sobrien# include <cdfs/cdfsmount.h>
95138494Sobrien#endif /* HAVE_CDFS_CDFSMOUNT_H */
95238494Sobrien
95338494Sobrien/*
95438494Sobrien * Actions to take if <isofs/cd9660/cd9660_mount.h> exists.
95538494Sobrien */
95638494Sobrien#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H
95738494Sobrien# include <isofs/cd9660/cd9660_mount.h>
95838494Sobrien#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */
95938494Sobrien
96038494Sobrien/*
96138494Sobrien * Actions to take if <mount.h> exists.
96238494Sobrien */
96338494Sobrien#ifdef HAVE_MOUNT_H
96438494Sobrien# include <mount.h>
96538494Sobrien#endif /* HAVE_MOUNT_H */
96638494Sobrien
96738494Sobrien/*
96838494Sobrien * Actions to take if <nsswitch.h> exists.
96938494Sobrien */
97038494Sobrien#ifdef HAVE_NSSWITCH_H
97138494Sobrien# include <nsswitch.h>
97238494Sobrien#endif /* HAVE_NSSWITCH_H */
97338494Sobrien
97438494Sobrien/*
97538494Sobrien * Actions to take if <rpc/auth_des.h> exists.
97638494Sobrien */
97738494Sobrien#ifdef HAVE_RPC_AUTH_DES_H
97838494Sobrien# include <rpc/auth_des.h>
97938494Sobrien#endif /* HAVE_RPC_AUTH_DES_H */
98038494Sobrien
98138494Sobrien/*
98238494Sobrien * Actions to take if <rpc/pmap_clnt.h> exists.
98338494Sobrien */
98438494Sobrien#ifdef HAVE_RPC_PMAP_CLNT_H
98538494Sobrien# include <rpc/pmap_clnt.h>
98638494Sobrien#endif /* HAVE_RPC_PMAP_CLNT_H */
98738494Sobrien
98838494Sobrien/*
98938494Sobrien * Actions to take if <rpc/pmap_prot.h> exists.
99038494Sobrien */
99138494Sobrien#ifdef HAVE_RPC_PMAP_PROT_H
99238494Sobrien# include <rpc/pmap_prot.h>
99338494Sobrien#endif /* HAVE_RPC_PMAP_PROT_H */
99438494Sobrien
99538494Sobrien
99638494Sobrien/*
99738494Sobrien * Actions to take if <rpcsvc/mount.h> exists.
99838494Sobrien * AIX does not protect against this file doubly included,
99938494Sobrien * so I have to do my own protection here.
100038494Sobrien */
100138494Sobrien#ifdef HAVE_RPCSVC_MOUNT_H
100238494Sobrien# ifndef _RPCSVC_MOUNT_H
100338494Sobrien#  include <rpcsvc/mount.h>
100438494Sobrien# endif /* not _RPCSVC_MOUNT_H */
100538494Sobrien#endif /* HAVE_RPCSVC_MOUNT_H */
100638494Sobrien
100738494Sobrien/*
100838494Sobrien * Actions to take if <rpcsvc/nis.h> exists.
100938494Sobrien */
101038494Sobrien#ifdef HAVE_RPCSVC_NIS_H
1011174299Sobrien/*
1012174299Sobrien * Solaris 10 (build 72) defines GROUP_OBJ in <sys/acl.h>, which is included
1013174299Sobrien * in many other header files.  <rpcsvc/nis.h> uses GROUP_OBJ inside enum
1014174299Sobrien * zotypes.  So if you're unlucky enough to include both headers, you get a
1015174299Sobrien * compile error because the two symbols conflict.
1016174299Sobrien * A similar conflict arises with Sun cc and the definition of "GROUP".
1017174299Sobrien *
1018174299Sobrien * Temp hack: undefine acl.h's GROUP_OBJ and GROUP because they're not needed
1019174299Sobrien * for am-utils.
1020174299Sobrien */
1021174299Sobrien# ifdef GROUP_OBJ
1022174299Sobrien#  undef GROUP_OBJ
1023174299Sobrien# endif /* GROUP_OBJ */
1024174299Sobrien# ifdef GROUP
1025174299Sobrien#  undef GROUP
1026174299Sobrien# endif /* GROUP */
102738494Sobrien# include <rpcsvc/nis.h>
102838494Sobrien#endif /* HAVE_RPCSVC_NIS_H */
102938494Sobrien
103038494Sobrien/*
103138494Sobrien * Actions to take if <setjmp.h> exists.
103238494Sobrien */
103338494Sobrien#ifdef HAVE_SETJMP_H
103438494Sobrien# include <setjmp.h>
103538494Sobrien#endif /* HAVE_SETJMP_H */
103638494Sobrien
103738494Sobrien/*
103838494Sobrien * Actions to take if <signal.h> exists.
103938494Sobrien */
104038494Sobrien#ifdef HAVE_SIGNAL_H
104138494Sobrien# include <signal.h>
104238494Sobrien#endif /* HAVE_SIGNAL_H */
104338494Sobrien
104438494Sobrien/*
104538494Sobrien * Actions to take if <string.h> exists.
104638494Sobrien */
104738494Sobrien#ifdef HAVE_STRING_H
104838494Sobrien# include <string.h>
104938494Sobrien#endif /* HAVE_STRING_H */
105038494Sobrien
105138494Sobrien/*
105238494Sobrien * Actions to take if <strings.h> exists.
105338494Sobrien */
105438494Sobrien#ifdef HAVE_STRINGS_H
105538494Sobrien# include <strings.h>
105638494Sobrien#endif /* HAVE_STRINGS_H */
105738494Sobrien
105838494Sobrien/*
105938494Sobrien * Actions to take if <sys/config.h> exists.
106038494Sobrien */
106138494Sobrien#ifdef HAVE_SYS_CONFIG_H
106238494Sobrien# include <sys/config.h>
106338494Sobrien#endif /* HAVE_SYS_CONFIG_H */
106438494Sobrien
106538494Sobrien/*
106638494Sobrien * Actions to take if <sys/dg_mount.h> exists.
106738494Sobrien */
106838494Sobrien#ifdef HAVE_SYS_DG_MOUNT_H
106938494Sobrien# include <sys/dg_mount.h>
107038494Sobrien#endif /* HAVE_SYS_DG_MOUNT_H */
107138494Sobrien
107238494Sobrien/*
107338494Sobrien * Actions to take if <sys/fs_types.h> exists.
107438494Sobrien */
107538494Sobrien#ifdef HAVE_SYS_FS_TYPES_H
107638494Sobrien/*
107738494Sobrien * Define KERNEL here to avoid multiple definitions of gt_names[] on
107838494Sobrien * Ultrix 4.3.
107938494Sobrien */
108038494Sobrien# define KERNEL
108138494Sobrien# include <sys/fs_types.h>
108238494Sobrien# undef KERNEL
108338494Sobrien#endif /* HAVE_SYS_FS_TYPES_H */
108438494Sobrien
108538494Sobrien/*
108638494Sobrien * Actions to take if <sys/fstyp.h> exists.
108738494Sobrien */
108838494Sobrien#ifdef HAVE_SYS_FSTYP_H
108938494Sobrien# include <sys/fstyp.h>
109038494Sobrien#endif /* HAVE_SYS_FSTYP_H */
109138494Sobrien
109238494Sobrien/*
109338494Sobrien * Actions to take if <sys/lock.h> exists.
109438494Sobrien */
109538494Sobrien#ifdef HAVE_SYS_LOCK_H
109638494Sobrien# include <sys/lock.h>
109738494Sobrien#endif /* HAVE_SYS_LOCK_H */
109838494Sobrien
109938494Sobrien/*
110038494Sobrien * Actions to take if <sys/machine.h> exists.
110138494Sobrien */
110238494Sobrien#ifdef HAVE_SYS_MACHINE_H
110338494Sobrien# include <sys/machine.h>
110438494Sobrien#endif /* HAVE_SYS_MACHINE_H */
110538494Sobrien
110638494Sobrien/*
110738494Sobrien * Actions to take if <sys/mntctl.h> exists.
110838494Sobrien */
110938494Sobrien#ifdef HAVE_SYS_MNTCTL_H
111038494Sobrien# include <sys/mntctl.h>
111138494Sobrien#endif /* HAVE_SYS_MNTCTL_H */
111238494Sobrien
111338494Sobrien/*
111438494Sobrien * Actions to take if <sys/mnttab.h> exists.
111538494Sobrien */
111638494Sobrien#ifdef HAVE_SYS_MNTTAB_H
111738494Sobrien# include <sys/mnttab.h>
111838494Sobrien#endif /* HAVE_SYS_MNTTAB_H */
111938494Sobrien
112038494Sobrien/*
112138494Sobrien * Actions to take if <mnttab.h> exists.
112238494Sobrien * Do not include it if MNTTAB is already defined because it probably
112338494Sobrien * came from <sys/mnttab.h> and we do not want conflicting definitions.
112438494Sobrien */
112538494Sobrien#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB)
112638494Sobrien# include <mnttab.h>
112738494Sobrien#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */
112838494Sobrien
112938494Sobrien/*
113038494Sobrien * Actions to take if <netconfig.h> exists.
113138494Sobrien */
113238494Sobrien#ifdef HAVE_NETCONFIG_H
113338494Sobrien# include <netconfig.h>
113438494Sobrien/* Some systems (Solaris 2.5.1) don't declare this external */
113538494Sobrienextern char *nc_sperror(void);
113638494Sobrien#endif /* HAVE_NETCONFIG_H */
113738494Sobrien
113838494Sobrien/*
113938494Sobrien * Actions to take if <sys/netconfig.h> exists.
114038494Sobrien */
114138494Sobrien#ifdef HAVE_SYS_NETCONFIG_H
114238494Sobrien# include <sys/netconfig.h>
114338494Sobrien#endif /* HAVE_SYS_NETCONFIG_H */
114438494Sobrien
114538494Sobrien/*
114638494Sobrien * Actions to take if <sys/pathconf.h> exists.
114738494Sobrien */
114838494Sobrien#ifdef HAVE_SYS_PATHCONF_H
114938494Sobrien# include <sys/pathconf.h>
115038494Sobrien#endif /* HAVE_SYS_PATHCONF_H */
115138494Sobrien
115238494Sobrien/*
115338494Sobrien * Actions to take if <sys/resource.h> exists.
115438494Sobrien */
115538494Sobrien#ifdef HAVE_SYS_RESOURCE_H
115638494Sobrien# include <sys/resource.h>
115738494Sobrien#endif /* HAVE_SYS_RESOURCE_H */
115838494Sobrien
115938494Sobrien/*
116038494Sobrien * Actions to take if <sys/sema.h> exists.
116138494Sobrien */
116238494Sobrien#ifdef HAVE_SYS_SEMA_H
116338494Sobrien# include <sys/sema.h>
116438494Sobrien#endif /* HAVE_SYS_SEMA_H */
116538494Sobrien
116638494Sobrien/*
116738494Sobrien * Actions to take if <sys/signal.h> exists.
116838494Sobrien */
116938494Sobrien#ifdef HAVE_SYS_SIGNAL_H
117038494Sobrien# include <sys/signal.h>
117138494Sobrien#endif /* HAVE_SYS_SIGNAL_H */
117238494Sobrien
117338494Sobrien/*
117438494Sobrien * Actions to take if <sys/sockio.h> exists.
117538494Sobrien */
117638494Sobrien#ifdef HAVE_SYS_SOCKIO_H
117738494Sobrien# include <sys/sockio.h>
117838494Sobrien#endif /* HAVE_SYS_SOCKIO_H */
117938494Sobrien
118038494Sobrien/*
118138494Sobrien * Actions to take if <sys/syscall.h> exists.
118238494Sobrien */
118338494Sobrien#ifdef HAVE_SYS_SYSCALL_H
118438494Sobrien# include <sys/syscall.h>
118538494Sobrien#endif /* HAVE_SYS_SYSCALL_H */
118638494Sobrien
118738494Sobrien/*
118838494Sobrien * Actions to take if <sys/syslimits.h> exists.
118938494Sobrien */
119038494Sobrien#ifdef HAVE_SYS_SYSLIMITS_H
119138494Sobrien# include <sys/syslimits.h>
119238494Sobrien#endif /* HAVE_SYS_SYSLIMITS_H */
119338494Sobrien
119438494Sobrien/*
119538494Sobrien * Actions to take if <tiuser.h> exists.
119638494Sobrien */
119738494Sobrien#ifdef HAVE_TIUSER_H
119838494Sobrien/*
119942633Sobrien * Some systems like AIX have multiple definitions for T_NULL and others
120038494Sobrien * that are defined first in <arpa/nameser.h>.
120138494Sobrien */
120238494Sobrien# ifdef HAVE_ARPA_NAMESER_H
120338494Sobrien#  ifdef T_NULL
120438494Sobrien#   undef T_NULL
120538494Sobrien#  endif /* T_NULL */
120638494Sobrien#  ifdef T_UNSPEC
120738494Sobrien#   undef T_UNSPEC
120838494Sobrien#  endif /* T_UNSPEC */
120938494Sobrien#  ifdef T_IDLE
121038494Sobrien#   undef T_IDLE
121138494Sobrien#  endif /* T_IDLE */
121238494Sobrien# endif /* HAVE_ARPA_NAMESER_H */
121338494Sobrien# include <tiuser.h>
121438494Sobrien#endif /* HAVE_TIUSER_H */
121538494Sobrien
121638494Sobrien/*
121738494Sobrien * Actions to take if <sys/tiuser.h> exists.
121838494Sobrien */
121938494Sobrien#ifdef HAVE_SYS_TIUSER_H
122038494Sobrien# include <sys/tiuser.h>
122138494Sobrien#endif /* HAVE_SYS_TIUSER_H */
122238494Sobrien
122338494Sobrien/*
122438494Sobrien * Actions to take if <sys/statfs.h> exists.
122538494Sobrien */
122638494Sobrien#ifdef HAVE_SYS_STATFS_H
122738494Sobrien# include <sys/statfs.h>
122838494Sobrien#endif /* HAVE_SYS_STATFS_H */
122938494Sobrien
123038494Sobrien/*
1231174299Sobrien * Actions to take if <sys/statvfs.h> exists.
1232174299Sobrien */
1233174299Sobrien#ifdef HAVE_SYS_STATVFS_H
1234174299Sobrien# include <sys/statvfs.h>
1235174299Sobrien#endif /* HAVE_SYS_STATVFS_H */
1236174299Sobrien
1237174299Sobrien/*
123838494Sobrien * Actions to take if <sys/vfs.h> exists.
123938494Sobrien */
124038494Sobrien#ifdef HAVE_SYS_VFS_H
124138494Sobrien# include <sys/vfs.h>
124238494Sobrien#endif /* HAVE_SYS_VFS_H */
124338494Sobrien
124438494Sobrien/*
124538494Sobrien * Actions to take if <sys/vmount.h> exists.
124638494Sobrien */
124738494Sobrien#ifdef HAVE_SYS_VMOUNT_H
124838494Sobrien# include <sys/vmount.h>
124938494Sobrien#endif /* HAVE_SYS_VMOUNT_H */
125038494Sobrien
125138494Sobrien/*
125238494Sobrien * Actions to take if <ufs/ufs_mount.h> exists.
125338494Sobrien */
125438494Sobrien#ifdef HAVE_UFS_UFS_MOUNT_H
125582805Sobrien# include <ufs/ufs_mount.h>
125682805Sobrien#endif /* HAVE_UFS_UFS_MOUNT_H */
125738494Sobrien
125838494Sobrien/*
125938494Sobrien * Are S_ISDIR, S_ISREG, et al broken?  If not, include <sys/stat.h>.
126038494Sobrien * Turned off the not using sys/stat.h based on if the macros are
126138494Sobrien * "broken", because they incorrectly get reported as broken on
126238494Sobrien * ncr2.
126338494Sobrien */
126438494Sobrien#ifndef STAT_MACROS_BROKEN_notused
126538494Sobrien/*
126638494Sobrien * RedHat Linux 4.2 (alpha) has a problem in the headers that causes
126742633Sobrien * duplicate definitions, and also some other nasty bugs.  Upgrade to Redhat
126838494Sobrien * 5.0!
126938494Sobrien */
127038494Sobrien# ifdef HAVE_SYS_STAT_H
127138494Sobrien/* avoid duplicates or conflicts with <linux/stat.h> (RedHat alpha linux) */
127238494Sobrien#  if defined(S_IFREG) && defined(HAVE_STATBUF_H)
127338494Sobrien#   include <statbuf.h>
127438494Sobrien#   undef S_IFBLK
127538494Sobrien#   undef S_IFCHR
127638494Sobrien#   undef S_IFDIR
127738494Sobrien#   undef S_IFIFO
127838494Sobrien#   undef S_IFLNK
127938494Sobrien#   undef S_IFMT
128038494Sobrien#   undef S_IFREG
128138494Sobrien#   undef S_IFSOCK
128238494Sobrien#   undef S_IRGRP
128338494Sobrien#   undef S_IROTH
128438494Sobrien#   undef S_IRUSR
128538494Sobrien#   undef S_IRWXG
128638494Sobrien#   undef S_IRWXO
128738494Sobrien#   undef S_IRWXU
128838494Sobrien#   undef S_ISBLK
128938494Sobrien#   undef S_ISCHR
129038494Sobrien#   undef S_ISDIR
129138494Sobrien#   undef S_ISFIFO
129238494Sobrien#   undef S_ISGID
129338494Sobrien#   undef S_ISLNK
129438494Sobrien#   undef S_ISREG
129538494Sobrien#   undef S_ISSOCK
129638494Sobrien#   undef S_ISUID
129738494Sobrien#   undef S_ISVTX
129838494Sobrien#   undef S_IWGRP
129938494Sobrien#   undef S_IWOTH
130038494Sobrien#   undef S_IWUSR
130138494Sobrien#   undef S_IXGRP
130238494Sobrien#   undef S_IXOTH
130338494Sobrien#   undef S_IXUSR
130438494Sobrien#  endif /* defined(S_IFREG) && defined(HAVE_STATBUF_H) */
130538494Sobrien#  include <sys/stat.h>
130638494Sobrien# endif /* HAVE_SYS_STAT_H */
130738494Sobrien#endif /* not STAT_MACROS_BROKEN_notused */
130838494Sobrien
130938494Sobrien/*
131038494Sobrien * Actions to take if <stdio.h> exists.
131138494Sobrien */
131238494Sobrien#ifdef HAVE_STDIO_H
131338494Sobrien# include <stdio.h>
131438494Sobrien#endif /* HAVE_STDIO_H */
131538494Sobrien
131638494Sobrien/*
131738494Sobrien * Actions to take if <stdlib.h> exists.
131838494Sobrien */
131938494Sobrien#ifdef HAVE_STDLIB_H
132038494Sobrien# include <stdlib.h>
132138494Sobrien#endif /* HAVE_STDLIB_H */
132238494Sobrien
132338494Sobrien/*
132438494Sobrien * Actions to take if <regex.h> exists.
132538494Sobrien */
132638494Sobrien#ifdef HAVE_REGEX_H
132738494Sobrien# include <regex.h>
132838494Sobrien#endif /* HAVE_REGEX_H */
132938494Sobrien
1330174299Sobrien/*
1331174299Sobrien * Actions to take if <tcpd.h> exists.
1332174299Sobrien */
1333174299Sobrien#if defined(HAVE_TCPD_H) && defined(HAVE_LIBWRAP)
1334174299Sobrien# include <tcpd.h>
1335174299Sobrien#endif /* defined(HAVE_TCPD_H) && defined(HAVE_LIBWRAP) */
133638494Sobrien
1337174299Sobrien
133838494Sobrien/****************************************************************************/
133938494Sobrien/*
134038494Sobrien * Specific macros we're looking for.
134138494Sobrien */
134238494Sobrien#ifndef HAVE_MEMSET
134338494Sobrien# ifdef HAVE_BZERO
134438494Sobrien#  define	memset(ptr, val, len)	bzero((ptr), (len))
134538494Sobrien# else /* not HAVE_BZERO */
134638494Sobrien#  error Cannot find either memset or bzero!
134738494Sobrien# endif /* not HAVE_BZERO */
134838494Sobrien#endif /* not HAVE_MEMSET */
134938494Sobrien
135038494Sobrien#ifndef HAVE_MEMMOVE
135138494Sobrien# ifdef HAVE_BCOPY
135238494Sobrien#  define	memmove(to, from, len)	bcopy((from), (to), (len))
135338494Sobrien# else /* not HAVE_BCOPY */
135438494Sobrien#  error Cannot find either memmove or bcopy!
135538494Sobrien# endif /* not HAVE_BCOPY */
135638494Sobrien#endif /* not HAVE_MEMMOVE */
135738494Sobrien
135838494Sobrien/*
135938494Sobrien * memcmp() is more problematic:
136038494Sobrien * Systems that don't have it, but have bcmp(), will use bcmp() instead.
136138494Sobrien * Those that have it, but it is bad (SunOS 4 doesn't handle
136238494Sobrien * 8 bit comparisons correctly), will get to use am_memcmp().
136338494Sobrien * Otherwise if you have memcmp() and it is good, use it.
136438494Sobrien */
136538494Sobrien#ifdef HAVE_MEMCMP
136638494Sobrien# ifdef HAVE_BAD_MEMCMP
136738494Sobrien#  define	memcmp		am_memcmp
136838494Sobrienextern int am_memcmp(const voidp s1, const voidp s2, size_t len);
136938494Sobrien# endif /* HAVE_BAD_MEMCMP */
137038494Sobrien#else /* not HAVE_MEMCMP */
137138494Sobrien# ifdef HAVE_BCMP
137238494Sobrien#  define	memcmp(a, b, len)	bcmp((a), (b), (len))
137338494Sobrien# endif /* HAVE_BCMP */
137438494Sobrien#endif /* not HAVE_MEMCMP */
137538494Sobrien
137638494Sobrien#ifndef HAVE_SETEUID
137738494Sobrien# ifdef HAVE_SETRESUID
137838494Sobrien#  define	seteuid(x)		setresuid(-1,(x),-1)
137938494Sobrien# else /* not HAVE_SETRESUID */
138038494Sobrien#  error Cannot find either seteuid or setresuid!
138138494Sobrien# endif /* not HAVE_SETRESUID */
138238494Sobrien#endif /* not HAVE_SETEUID */
138338494Sobrien
138438494Sobrien/*
138538494Sobrien * Define type of mntent_t.
138638494Sobrien * Defaults to struct mntent, else struct mnttab.  If neither is found, and
138738494Sobrien * the operating system does keep not mount tables in the kernel, then flag
138838494Sobrien * it as an error.  If neither is found and the OS keeps mount tables in the
138938494Sobrien * kernel, then define our own version of mntent; it will be needed for amd
139038494Sobrien * to keep its own internal version of the mount tables.
139138494Sobrien */
139238494Sobrien#ifdef HAVE_STRUCT_MNTENT
139338494Sobrientypedef struct mntent mntent_t;
139438494Sobrien#else /* not HAVE_STRUCT_MNTENT */
139538494Sobrien# ifdef HAVE_STRUCT_MNTTAB
139638494Sobrientypedef struct mnttab mntent_t;
139738494Sobrien/* map struct mnttab field names to struct mntent field names */
139838494Sobrien#  define mnt_fsname	mnt_special
139938494Sobrien#  define mnt_dir	mnt_mountp
140038494Sobrien#  define mnt_opts	mnt_mntopts
140138494Sobrien#  define mnt_type	mnt_fstype
140238494Sobrien# else /* not HAVE_STRUCT_MNTTAB */
140338494Sobrien#  ifdef MOUNT_TABLE_ON_FILE
140438494Sobrien#   error Could not find definition for struct mntent or struct mnttab!
140538494Sobrien#  else /* not MOUNT_TABLE_ON_FILE */
140638494Sobrientypedef struct _am_mntent {
140738494Sobrien  char	*mnt_fsname;		/* name of mounted file system */
140838494Sobrien  char	*mnt_dir;		/* file system path prefix */
140938494Sobrien  char	*mnt_type;		/* MNTTAB_TYPE_* */
141038494Sobrien  char	*mnt_opts;		/* MNTTAB_OPT_* */
141138494Sobrien  int	mnt_freq;		/* dump frequency, in days */
141238494Sobrien  int	mnt_passno;		/* pass number on parallel fsck */
141338494Sobrien} mntent_t;
141438494Sobrien#  endif /* not MOUNT_TABLE_ON_FILE */
141538494Sobrien# endif /* not HAVE_STRUCT_MNTTAB */
141638494Sobrien#endif /* not HAVE_STRUCT_MNTENT */
141738494Sobrien
1418174299Sobrien/*
1419174299Sobrien * Provide FD_* macros for systems that lack them.
1420174299Sobrien */
1421174299Sobrien#ifndef FD_SET
1422174299Sobrien# define FD_SET(fd, set) (*(set) |= (1 << (fd)))
1423174299Sobrien# define FD_ISSET(fd, set) (*(set) & (1 << (fd)))
1424174299Sobrien# define FD_CLR(fd, set) (*(set) &= ~(1 << (fd)))
1425174299Sobrien# define FD_ZERO(set) (*(set) = 0)
1426174299Sobrien#endif /* not FD_SET */
142738494Sobrien
1428174299Sobrien
142938494Sobrien/*
143038494Sobrien * Complete external definitions missing from some systems.
143138494Sobrien */
143238494Sobrien
143338494Sobrien#ifndef HAVE_EXTERN_SYS_ERRLIST
143482805Sobrienextern const char *const sys_errlist[];
143538494Sobrien#endif /* not HAVE_EXTERN_SYS_ERRLIST */
143638494Sobrien
143738494Sobrien#ifndef HAVE_EXTERN_OPTARG
143838494Sobrienextern char *optarg;
143938494Sobrienextern int optind;
144038494Sobrien#endif /* not HAVE_EXTERN_OPTARG */
144138494Sobrien
144251300Sobrien#if defined(HAVE_CLNT_SPCREATEERROR) && !defined(HAVE_EXTERN_CLNT_SPCREATEERROR)
144351300Sobrienextern char *clnt_spcreateerror(const char *s);
144451300Sobrien#endif /* defined(HAVE_CLNT_SPCREATEERROR) && !defined(HAVE_EXTERN_CLNT_SPCREATEERROR) */
144551300Sobrien
144638494Sobrien#if defined(HAVE_CLNT_SPERRNO) && !defined(HAVE_EXTERN_CLNT_SPERRNO)
144738494Sobrienextern char *clnt_sperrno(const enum clnt_stat num);
144838494Sobrien#endif /* defined(HAVE_CLNT_SPERRNO) && !defined(HAVE_EXTERN_CLNT_SPERRNO) */
144938494Sobrien
145038494Sobrien#ifndef HAVE_EXTERN_FREE
145138494Sobrienextern void free(voidp);
145238494Sobrien#endif /* not HAVE_EXTERN_FREE */
145338494Sobrien
145438494Sobrien#if defined(HAVE_GET_MYADDRESS) && !defined(HAVE_EXTERN_GET_MYADDRESS)
145538494Sobrienextern void get_myaddress(struct sockaddr_in *addr);
145638494Sobrien#endif /* defined(HAVE_GET_MYADDRESS) && !defined(HAVE_EXTERN_GET_MYADDRESS) */
145738494Sobrien
145838494Sobrien#if defined(HAVE_GETDOMAINNAME) && !defined(HAVE_EXTERN_GETDOMAINNAME)
145938494Sobrien# if defined(HAVE_MAP_NIS) || defined(HAVE_MAP_NISPLUS)
146038494Sobrienextern int getdomainname(char *name, int namelen);
146138494Sobrien# endif /* defined(HAVE_MAP_NIS) || defined(HAVE_MAP_NISPLUS) */
146238494Sobrien#endif /* defined(HAVE_GETDOMAINNAME) && !defined(HAVE_EXTERN_GETDOMAINNAME) */
146338494Sobrien
146438494Sobrien#if defined(HAVE_GETDTABLESIZE) && !defined(HAVE_EXTERN_GETDTABLESIZE)
146538494Sobrienextern int getdtablesize(void);
146638494Sobrien#endif /* defined(HAVE_GETDTABLESIZE) && !defined(HAVE_EXTERN_GETDTABLESIZE) */
146738494Sobrien
146838494Sobrien#if defined(HAVE_GETHOSTNAME) && !defined(HAVE_EXTERN_GETHOSTNAME)
146938494Sobrienextern int gethostname(char *name, int namelen);
147038494Sobrien#endif /* defined(HAVE_GETHOSTNAME) && !defined(HAVE_EXTERN_GETHOSTNAME) */
147138494Sobrien
147242633Sobrien#ifndef HAVE_EXTERN_GETLOGIN
147342633Sobrienextern char *getlogin(void);
147442633Sobrien#endif /* not HAVE_EXTERN_GETLOGIN */
147542633Sobrien
147638494Sobrien#if defined(HAVE_GETPAGESIZE) && !defined(HAVE_EXTERN_GETPAGESIZE)
147738494Sobrienextern int getpagesize(void);
147838494Sobrien#endif /* defined(HAVE_GETPAGESIZE) && !defined(HAVE_EXTERN_GETPAGESIZE) */
147938494Sobrien
148038494Sobrien#ifndef HAVE_EXTERN_GETWD
148138494Sobrienextern char *getwd(char *s);
148238494Sobrien#endif /* not HAVE_EXTERN_GETWD */
148338494Sobrien
1484174299Sobrien#if defined(HAVE_TCPD_H) && defined(HAVE_LIBWRAP) && !defined(HAVE_EXTERN_HOSTS_CTL)
1485174299Sobrienextern int hosts_ctl(char *daemon, char *client_name, char *client_addr, char *client_user);
1486174299Sobrien#endif /* defined(HAVE_TCPD_H) && defined(HAVE_LIBWRAP) && !defined(HAVE_EXTERN_HOSTS_CTL) */
1487174299Sobrien
148838494Sobrien#ifndef HAVE_EXTERN_INNETGR
148938494Sobrienextern int innetgr(char *, char *, char *, char *);
149038494Sobrien#endif /* not HAVE_EXTERN_INNETGR */
149138494Sobrien
149238494Sobrien#if defined(HAVE_MKSTEMP) && !defined(HAVE_EXTERN_MKSTEMP)
149338494Sobrienextern int mkstemp(char *);
149438494Sobrien#endif /* defined(HAVE_MKSTEMP) && !defined(HAVE_EXTERN_MKSTEMP) */
149538494Sobrien
149638494Sobrien#ifndef HAVE_EXTERN_SBRK
149738494Sobrienextern caddr_t sbrk(int incr);
149838494Sobrien#endif /* not HAVE_EXTERN_SBRK */
149938494Sobrien
150042633Sobrien#if defined(HAVE_SETEUID) && !defined(HAVE_EXTERN_SETEUID)
150142633Sobrienextern int seteuid(uid_t euid);
150242633Sobrien#endif /* not defined(HAVE_SETEUID) && !defined(HAVE_EXTERN_SETEUID) */
150342633Sobrien
150451595Sobrien#if defined(HAVE_SETITIMER) && !defined(HAVE_EXTERN_SETITIMER)
150551595Sobrienextern int setitimer(int, struct itimerval *, struct itimerval *);
150651595Sobrien#endif /* defined(HAVE_SETITIMER) && !defined(HAVE_EXTERN_SETITIMER) */
150751595Sobrien
1508174299Sobrien#ifndef HAVE_EXTERN_SLEEP
1509174299Sobrienextern unsigned int sleep(unsigned int seconds);
1510174299Sobrien#endif /* not HAVE_EXTERN_SETITIMER */
1511174299Sobrien
151238494Sobrien#ifndef HAVE_EXTERN_STRCASECMP
151338494Sobrien/*
151438494Sobrien * define this extern even if function does not exist, for it will
151538494Sobrien * be filled in by libamu/strcasecmp.c
151638494Sobrien */
151738494Sobrienextern int strcasecmp(const char *s1, const char *s2);
151838494Sobrien#endif /* not HAVE_EXTERN_STRCASECMP */
151938494Sobrien
152038494Sobrien#ifndef HAVE_EXTERN_STRDUP
152138494Sobrien/*
152238494Sobrien * define this extern even if function does not exist, for it will
152338494Sobrien * be filled in by libamu/strdup.c
152438494Sobrien */
152538494Sobrienextern char *strdup(const char *s);
152638494Sobrien#endif /* not HAVE_EXTERN_STRDUP */
152738494Sobrien
1528174299Sobrien#ifndef HAVE_EXTERN_STRLCAT
1529174299Sobrien/*
1530174299Sobrien * define this extern even if function does not exist, for it will
1531174299Sobrien * be filled in by libamu/strlcat.c
1532174299Sobrien */
1533174299Sobrienextern size_t strlcat(char *dst, const char *src, size_t siz);
1534174299Sobrien#endif /* not HAVE_EXTERN_STRLCAT */
1535174299Sobrien
1536174299Sobrien#ifndef HAVE_EXTERN_STRLCPY
1537174299Sobrien/*
1538174299Sobrien * define this extern even if function does not exist, for it will
1539174299Sobrien * be filled in by libamu/strlcpy.c
1540174299Sobrien */
1541174299Sobrienextern size_t strlcpy(char *dst, const char *src, size_t siz);
1542174299Sobrien#endif /* not HAVE_EXTERN_STRLCPY */
1543174299Sobrien
154438494Sobrien#if defined(HAVE_STRSTR) && !defined(HAVE_EXTERN_STRSTR)
154538494Sobrienextern char *strstr(const char *s1, const char *s2);
154638494Sobrien#endif /* defined(HAVE_STRSTR) && !defined(HAVE_EXTERN_STRSTR) */
154738494Sobrien
154838494Sobrien#if defined(HAVE_USLEEP) && !defined(HAVE_EXTERN_USLEEP)
154938494Sobrienextern int usleep(u_int useconds);
155038494Sobrien#endif /* defined(HAVE_USLEEP) && !defined(HAVE_EXTERN_USLEEP) */
155138494Sobrien
155238494Sobrien#ifndef HAVE_EXTERN_UALARM
155338494Sobrienextern u_int ualarm(u_int usecs, u_int interval);
155438494Sobrien#endif /* not HAVE_EXTERN_UALARM */
155538494Sobrien
155638494Sobrien#if defined(HAVE_WAIT3) && !defined(HAVE_EXTERN_WAIT3)
155738494Sobrienextern int wait3(int *statusp, int options, struct rusage *rusage);
155838494Sobrien#endif /* defined(HAVE_WAIT3) && !defined(HAVE_EXTERN_WAIT3) */
155938494Sobrien
156052897Sobrien#if defined(HAVE_VSNPRINTF) && !defined(HAVE_EXTERN_VSNPRINTF)
156152897Sobrienextern int vsnprintf(char *, int, const char *, ...);
156252897Sobrien#endif /* defined(HAVE_VSNPRINTF) && !defined(HAVE_EXTERN_VSNPRINTF) */
156352897Sobrien
1564119682Smbr#ifndef HAVE_EXTERN_XDR_CALLMSG
1565119682Smbrextern bool_t xdr_callmsg(XDR *xdrs, struct rpc_msg *msg);
1566119682Smbr#endif /* not HAVE_EXTERN_XDR_CALLMSG */
1567119682Smbr
156838494Sobrien#ifndef HAVE_EXTERN_XDR_OPAQUE_AUTH
156942633Sobrienextern bool_t xdr_opaque_auth(XDR *xdrs, struct opaque_auth *auth);
157038494Sobrien#endif /* not HAVE_EXTERN_XDR_OPAQUE_AUTH */
157138494Sobrien
157238494Sobrien/****************************************************************************/
157338494Sobrien/*
157438494Sobrien * amd-specific header files.
157538494Sobrien */
157638494Sobrien#ifdef THIS_HEADER_FILE_IS_INCLUDED_ABOVE
157738494Sobrien# include <amu_nfs_prot.h>
157838494Sobrien#endif /* THIS_HEADER_FILE_IS_INCLUDED_ABOVE */
1579174299Sobrien#include <am_compat.h>
1580174299Sobrien#include <am_xdr_func.h>
158138494Sobrien#include <am_utils.h>
158238494Sobrien#include <amq_defs.h>
158338494Sobrien#include <aux_conf.h>
158438494Sobrien
158538494Sobrien
158638494Sobrien/****************************************************************************/
158738494Sobrien/*
158842633Sobrien * External definitions that depend on other macros available (or not)
158938494Sobrien * and those are probably declared in any of the above headers.
159038494Sobrien */
159138494Sobrien
1592174299Sobrien#ifdef HAVE_HASMNTOPT
1593174299Sobrien# ifdef HAVE_BAD_HASMNTOPT
1594174299Sobrienextern char *amu_hasmntopt(mntent_t *mnt, char *opt);
1595174299Sobrien# else /* not HAVE_BAD_HASMNTOPT */
1596174299Sobrien#  define amu_hasmntopt hasmntopt
1597174299Sobrien# endif /* not HAVE_BAD_HASMNTOPT */
1598174299Sobrien#else /* not HAVE_HASMNTOPT */
1599174299Sobrienextern char *amu_hasmntopt(mntent_t *mnt, char *opt);
160038494Sobrien#endif /* not HAVE_HASMNTOPT */
160138494Sobrien
160238494Sobrien#endif /* not _AM_DEFS_H */
1603