138494Sobrien/*
2310490Scy * Copyright (c) 1997-2014 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.
19310490Scy * 3. Neither the name of the University nor the names of its contributors
2038494Sobrien *    may be used to endorse or promote products derived from this software
2138494Sobrien *    without specific prior written permission.
2238494Sobrien *
2338494Sobrien * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2438494Sobrien * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2538494Sobrien * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2638494Sobrien * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2738494Sobrien * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2838494Sobrien * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2938494Sobrien * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3038494Sobrien * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
3138494Sobrien * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3238494Sobrien * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3338494Sobrien * SUCH DAMAGE.
3438494Sobrien *
3538494Sobrien *
36174299Sobrien * File: am-utils/include/am_defs.h
37131706Smbr * $Id: am_defs.h,v 1.15.2.16 2004/05/12 15:54:31 ezk Exp $
3851300Sobrien * $FreeBSD: stable/10/contrib/amd/include/am_defs.h 310490 2016-12-23 22:42:14Z cy $
3938494Sobrien *
4038494Sobrien */
4138494Sobrien
4238494Sobrien/*
4338494Sobrien * Definitions that are not specific to the am-utils package, but
4438494Sobrien * are rather generic, and can be used elsewhere.
4538494Sobrien */
4638494Sobrien
4738494Sobrien#ifndef _AM_DEFS_H
4838494Sobrien#define _AM_DEFS_H
4938494Sobrien
5038494Sobrien/*
5138494Sobrien * Actions to take if ANSI C.
5238494Sobrien */
5338494Sobrien#if STDC_HEADERS
5438494Sobrien# include <string.h>
5538494Sobrien/* for function prototypes */
5638494Sobrien# define P(x) x
5738494Sobrien# define P_void void
5838494Sobrien#else /* not STDC_HEADERS */
5938494Sobrien/* empty function prototypes */
6038494Sobrien# define P(x) ()
6138494Sobrien# define P_void
6238494Sobrien# ifndef HAVE_STRCHR
6338494Sobrien#  define strchr index
6438494Sobrien#  define strrchr rindex
6538494Sobrien# endif /* not HAVE_STRCHR */
66310490Scychar *strchr(), *strrchr();
6738494Sobrien#endif /* not STDC_HEADERS */
6838494Sobrien
6938494Sobrien/*
7051300Sobrien * Handle gcc __attribute__ if available.
7151300Sobrien */
7251300Sobrien#ifndef __attribute__
7351300Sobrien/* This feature is available in gcc versions 2.5 and later.  */
7451300Sobrien# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
7551300Sobrien#  define __attribute__(Spec) /* empty */
7651300Sobrien# endif /* __GNUC__ < 2 ... */
7751300Sobrien/*
7851300Sobrien * The __-protected variants of `format' and `printf' attributes
7951300Sobrien * are accepted by gcc versions 2.6.4 (effectively 2.7) and later.
8051300Sobrien */
8151300Sobrien# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
8251300Sobrien#  define __format__ format
8351300Sobrien#  define __printf__ printf
8451300Sobrien# endif /* __GNUC__ < 2 ... */
8551300Sobrien#endif /* not __attribute__ */
8651300Sobrien
87310490Scy#define __IGNORE(result) \
88310490Scy    __ignore((unsigned long)result)
89310490Scy
90310490Scystatic inline void
91310490Scy__ignore(unsigned long result) {
92310490Scy    (void)&result;
93310490Scy}
94310490Scy
9551300Sobrien/*
9638494Sobrien * How to handle signals of any type
9738494Sobrien */
9838494Sobrien#ifdef HAVE_SYS_WAIT_H
9938494Sobrien# include <sys/wait.h>
10038494Sobrien#endif /* HAVE_SYS_WAIT_H */
10138494Sobrien#ifndef WEXITSTATUS
10238494Sobrien# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
10338494Sobrien#endif /* not WEXITSTATUS */
10438494Sobrien#ifndef WIFEXITED
10538494Sobrien# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
10638494Sobrien#endif /* not WIFEXITED */
10738494Sobrien
10838494Sobrien/*
10938494Sobrien * Actions to take regarding <time.h> and <sys/time.h>.
11038494Sobrien */
11138494Sobrien#if TIME_WITH_SYS_TIME
11238494Sobrien# include <sys/time.h>
113174299Sobrien# ifdef _ALL_SOURCE
114174299Sobrien/*
115174299Sobrien * AIX 5.2 needs struct sigevent from signal.h to be defined, but I
116174299Sobrien * don't want to move the inclusion of signal.h this early into this
117174299Sobrien * file.  Luckily, amd doesn't need the size of this structure in any
118174299Sobrien * other structure that it uses.  So we sidestep it for now.
119174299Sobrien */
120174299Sobrienstruct sigevent;
121174299Sobrien# endif /* _ALL_SOURCE */
12238494Sobrien# include <time.h>
12338494Sobrien#else /* not TIME_WITH_SYS_TIME */
12438494Sobrien# if HAVE_SYS_TIME_H
12538494Sobrien#  include <sys/time.h>
12638494Sobrien# else /* not HAVE_SYS_TIME_H */
12738494Sobrien#  include <time.h>
12838494Sobrien# endif /* not HAVE_SYS_TIME_H */
12938494Sobrien#endif /* not TIME_WITH_SYS_TIME */
13038494Sobrien
13138494Sobrien/*
13238494Sobrien * Actions to take if <machine/endian.h> exists.
13338494Sobrien */
13438494Sobrien#ifdef HAVE_MACHINE_ENDIAN_H
13538494Sobrien# include <machine/endian.h>
13638494Sobrien#endif /* HAVE_MACHINE_ENDIAN_H */
13738494Sobrien
13838494Sobrien/*
13938494Sobrien * Big-endian or little-endian?
14038494Sobrien */
141310490Scy#ifndef BYTE_ORDER
142310490Scy# if defined(WORDS_BIGENDIAN)
143310490Scy#  define ARCH_ENDIAN "big"
144310490Scy# else /* not WORDS_BIGENDIAN */
145310490Scy#  define ARCH_ENDIAN "little"
146310490Scy# endif /* not WORDS_BIGENDIAN */
147310490Scy#else
148310490Scy# if BYTE_ORDER == BIG_ENDIAN
149310490Scy#  define ARCH_ENDIAN "big"
150310490Scy# else
151310490Scy#  define ARCH_ENDIAN "little"
152310490Scy# endif
153310490Scy#endif
15438494Sobrien
15538494Sobrien/*
15638494Sobrien * Actions to take if HAVE_SYS_TYPES_H is defined.
15738494Sobrien */
15838494Sobrien#if HAVE_SYS_TYPES_H
15938494Sobrien# include <sys/types.h>
16038494Sobrien#endif /* HAVE_SYS_TYPES_H */
16138494Sobrien
16238494Sobrien/*
163174299Sobrien * Actions to take if HAVE_LIMITS_H is defined.
164174299Sobrien */
165174299Sobrien#if HAVE_LIMITS_H_H
166174299Sobrien# include <limits.h>
167174299Sobrien#endif /* HAVE_LIMITS_H */
168174299Sobrien
169174299Sobrien/*
17038494Sobrien * Actions to take if HAVE_UNISTD_H is defined.
17138494Sobrien */
17238494Sobrien#if HAVE_UNISTD_H
17338494Sobrien# include <unistd.h>
17438494Sobrien#endif /* HAVE_UNISTD_H */
17538494Sobrien
17638494Sobrien/* after <unistd.h>, check if this is a POSIX.1 system */
17738494Sobrien#ifdef _POSIX_VERSION
17838494Sobrien/* Code for POSIX.1 systems. */
17938494Sobrien#endif /* _POSIX_VERSION */
18038494Sobrien
18138494Sobrien/*
18238494Sobrien * Variable length argument lists.
18338494Sobrien * Must use only one of the two!
18438494Sobrien */
18538494Sobrien#ifdef HAVE_STDARG_H
18638494Sobrien# include <stdarg.h>
18738494Sobrien/*
18838494Sobrien * On Solaris 2.6, <sys/varargs.h> is included in <sys/fs/autofs.h>
18938494Sobrien * So this ensures that only one is included.
19038494Sobrien */
19138494Sobrien# ifndef _SYS_VARARGS_H
19238494Sobrien#  define _SYS_VARARGS_H
19338494Sobrien# endif /* not _SYS_VARARGS_H */
19438494Sobrien#else /* not HAVE_STDARG_H */
19538494Sobrien# ifdef HAVE_VARARGS_H
19638494Sobrien#  include <varargs.h>
19738494Sobrien# endif /* HAVE_VARARGS_H */
19838494Sobrien#endif /* not HAVE_STDARG_H */
19938494Sobrien
20038494Sobrien/*
20138494Sobrien * Pick the right header file and macros for directory processing functions.
20238494Sobrien */
20338494Sobrien#if HAVE_DIRENT_H
20438494Sobrien# include <dirent.h>
20538494Sobrien# define NAMLEN(dirent) strlen((dirent)->d_name)
20638494Sobrien#else /* not HAVE_DIRENT_H */
20738494Sobrien# define dirent direct
20838494Sobrien# define NAMLEN(dirent) (dirent)->d_namlen
20938494Sobrien# if HAVE_SYS_NDIR_H
21038494Sobrien#  include <sys/ndir.h>
21138494Sobrien# endif /* HAVE_SYS_NDIR_H */
21238494Sobrien# if HAVE_SYS_DIR_H
21338494Sobrien#  include <sys/dir.h>
21438494Sobrien# endif /* HAVE_SYS_DIR_H */
21538494Sobrien# if HAVE_NDIR_H
21638494Sobrien#  include <ndir.h>
21738494Sobrien# endif /* HAVE_NDIR_H */
21838494Sobrien#endif /* not HAVE_DIRENT_H */
21938494Sobrien
22038494Sobrien/*
22138494Sobrien * Actions to take if HAVE_FCNTL_H is defined.
22238494Sobrien */
22338494Sobrien#if HAVE_FCNTL_H
22438494Sobrien# include <fcntl.h>
22538494Sobrien#endif /* HAVE_FCNTL_H */
22638494Sobrien
22738494Sobrien/*
22838494Sobrien * Actions to take if HAVE_MEMORY_H is defined.
22938494Sobrien */
23038494Sobrien#if HAVE_MEMORY_H
23138494Sobrien# include <memory.h>
23238494Sobrien#endif /* HAVE_MEMORY_H */
23338494Sobrien
23438494Sobrien/*
23538494Sobrien * Actions to take if HAVE_SYS_FILE_H is defined.
23638494Sobrien */
23738494Sobrien#if HAVE_SYS_FILE_H
23838494Sobrien# include <sys/file.h>
23938494Sobrien#endif /* HAVE_SYS_FILE_H */
24038494Sobrien
24138494Sobrien/*
24238494Sobrien * Actions to take if HAVE_SYS_IOCTL_H is defined.
24338494Sobrien */
24438494Sobrien#if HAVE_SYS_IOCTL_H
24538494Sobrien# include <sys/ioctl.h>
24638494Sobrien#endif /* HAVE_SYS_IOCTL_H */
24738494Sobrien
24838494Sobrien/*
24938494Sobrien * Actions to take if HAVE_SYSLOG_H or HAVE_SYS_SYSLOG_H is defined.
25038494Sobrien */
25138494Sobrien#ifdef HAVE_SYSLOG_H
25238494Sobrien# include <syslog.h>
25338494Sobrien#else /* not HAVE_SYSLOG_H */
25438494Sobrien# if HAVE_SYS_SYSLOG_H
25538494Sobrien#  include <sys/syslog.h>
25638494Sobrien# endif /* HAVE_SYS_SYSLOG_H */
25738494Sobrien#endif /* HAVE_SYSLOG_H */
25838494Sobrien
25938494Sobrien/*
26038494Sobrien * Actions to take if <sys/param.h> exists.
26138494Sobrien */
26238494Sobrien#ifdef HAVE_SYS_PARAM_H
26338494Sobrien# include <sys/param.h>
26438494Sobrien#endif /* HAVE_SYS_PARAM_H */
26538494Sobrien
26638494Sobrien/*
26738494Sobrien * Actions to take if <sys/socket.h> exists.
26838494Sobrien */
26938494Sobrien#ifdef HAVE_SYS_SOCKET_H
27038494Sobrien# include <sys/socket.h>
27138494Sobrien#endif /* HAVE_SYS_SOCKET_H */
27238494Sobrien
27338494Sobrien/*
27438494Sobrien * Actions to take if <rpc/rpc.h> exists.
27538494Sobrien */
27638494Sobrien#ifdef HAVE_RPC_RPC_H
27738494Sobrien/*
27838494Sobrien * Turn on PORTMAP, so that additional header files would get included
27938494Sobrien * and the important definition for UDPMSGSIZE is included too.
28038494Sobrien */
28138494Sobrien# ifndef PORTMAP
28238494Sobrien#  define PORTMAP
28338494Sobrien# endif /* not PORTMAP */
28438494Sobrien# include <rpc/rpc.h>
28538494Sobrien# ifndef XDRPROC_T_TYPE
28638494Sobrientypedef bool_t (*xdrproc_t) __P ((XDR *, __ptr_t, ...));
28738494Sobrien# endif /* not XDRPROC_T_TYPE */
28838494Sobrien#endif /* HAVE_RPC_RPC_H */
28938494Sobrien
29038494Sobrien/*
29138494Sobrien * Actions to take if <rpc/types.h> exists.
29238494Sobrien */
29338494Sobrien#ifdef HAVE_RPC_TYPES_H
29438494Sobrien# include <rpc/types.h>
29538494Sobrien#endif /* HAVE_RPC_TYPES_H */
29638494Sobrien
29738494Sobrien/*
29838494Sobrien * Actions to take if <rpc/xdr.h> exists.
29938494Sobrien */
30038494Sobrien/* Prevent multiple inclusion on Ultrix 4 */
30138494Sobrien#if defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__)
30238494Sobrien# include <rpc/xdr.h>
30338494Sobrien#endif /* defined(HAVE_RPC_XDR_H) && !defined(__XDR_HEADER__) */
30438494Sobrien
30538494Sobrien/*
30638494Sobrien * Actions to take if <malloc.h> exists.
307131706Smbr * Don't include malloc.h if stdlib.h exists, because modern
308131706Smbr * systems complain if you use malloc.h instead of stdlib.h.
309131706Smbr * XXX: let's hope there are no systems out there that need both.
31038494Sobrien */
311131706Smbr#if defined(HAVE_MALLOC_H) && !defined(HAVE_STDLIB_H)
31238494Sobrien# include <malloc.h>
313131706Smbr#endif /* defined(HAVE_MALLOC_H) && !defined(HAVE_STDLIB_H) */
31438494Sobrien
31538494Sobrien/*
31638494Sobrien * Actions to take if <mntent.h> exists.
31738494Sobrien */
31838494Sobrien#ifdef HAVE_MNTENT_H
31938494Sobrien/* some systems need <stdio.h> before <mntent.h> is included */
32038494Sobrien# ifdef HAVE_STDIO_H
32138494Sobrien#  include <stdio.h>
32238494Sobrien# endif /* HAVE_STDIO_H */
32338494Sobrien# include <mntent.h>
32438494Sobrien#endif /* HAVE_MNTENT_H */
32538494Sobrien
32638494Sobrien/*
32738494Sobrien * Actions to take if <sys/fsid.h> exists.
32838494Sobrien */
32938494Sobrien#ifdef HAVE_SYS_FSID_H
33038494Sobrien# include <sys/fsid.h>
33138494Sobrien#endif /* HAVE_SYS_FSID_H */
33238494Sobrien
33338494Sobrien/*
33438494Sobrien * Actions to take if <sys/utsname.h> exists.
33538494Sobrien */
33638494Sobrien#ifdef HAVE_SYS_UTSNAME_H
33738494Sobrien# include <sys/utsname.h>
33838494Sobrien#endif /* HAVE_SYS_UTSNAME_H */
33938494Sobrien
34038494Sobrien/*
34138494Sobrien * Actions to take if <sys/mntent.h> exists.
34238494Sobrien */
34338494Sobrien#ifdef HAVE_SYS_MNTENT_H
34438494Sobrien# include <sys/mntent.h>
34538494Sobrien#endif /* HAVE_SYS_MNTENT_H */
34638494Sobrien
34738494Sobrien/*
34851300Sobrien * Actions to take if <ndbm.h> or <db1/ndbm.h> exist.
34938494Sobrien * Should be included before <rpcsvc/yp_prot.h> because on some systems
35038494Sobrien * like Linux, it also defines "struct datum".
35138494Sobrien */
352131706Smbr#ifdef HAVE_MAP_NDBM
353131706Smbr# include NEW_DBM_H
35438494Sobrien# ifndef DATUM
35538494Sobrien/* ensure that struct datum is not included again from <rpcsvc/yp_prot.h> */
35638494Sobrien#  define DATUM
35738494Sobrien# endif /* not DATUM */
358131706Smbr#endif /* HAVE_MAP_NDBM */
35938494Sobrien
36038494Sobrien/*
36138494Sobrien * Actions to take if <net/errno.h> exists.
36238494Sobrien */
36338494Sobrien#ifdef HAVE_NET_ERRNO_H
36438494Sobrien# include <net/errno.h>
36538494Sobrien#endif /* HAVE_NET_ERRNO_H */
36638494Sobrien
36738494Sobrien/*
368174299Sobrien * Actions to take if <net/if.h> exists.
369174299Sobrien */
370174299Sobrien#ifdef HAVE_NET_IF_H
371174299Sobrien# include <net/if.h>
372174299Sobrien#endif /* HAVE_NET_IF_H */
373174299Sobrien
374174299Sobrien/*
37551300Sobrien * Actions to take if <net/route.h> exists.
37638494Sobrien */
37738494Sobrien#ifdef HAVE_NET_ROUTE_H
37838494Sobrien# include <net/route.h>
37938494Sobrien#endif /* HAVE_NET_ROUTE_H */
38038494Sobrien
38138494Sobrien/*
38251300Sobrien * Actions to take if <sys/mbuf.h> exists.
38338494Sobrien */
38438494Sobrien#ifdef HAVE_SYS_MBUF_H
38538494Sobrien# include <sys/mbuf.h>
38638494Sobrien/*
38751300Sobrien * OSF4 (DU-4.0) defines m_next and m_data also in <sys/mount.h> so I must
38838494Sobrien # undefine them here to avoid conflicts.
38938494Sobrien */
39038494Sobrien# ifdef m_next
39138494Sobrien#  undef m_next
39238494Sobrien# endif /* m_next */
39338494Sobrien# ifdef m_data
39438494Sobrien#  undef m_data
39538494Sobrien# endif /* m_data */
39638494Sobrien/*
39751300Sobrien * AIX 3 defines MFREE and m_flags also in <sys/mount.h>.
39838494Sobrien */
39938494Sobrien# ifdef m_flags
40038494Sobrien#  undef m_flags
40138494Sobrien# endif /* m_flags */
40238494Sobrien# ifdef MFREE
40338494Sobrien#  undef MFREE
40438494Sobrien# endif /* MFREE */
40538494Sobrien#endif /* HAVE_SYS_MBUF_H */
40638494Sobrien
40738494Sobrien/*
408174299Sobrien * Actions to take if <sys/mman.h> exists.
40938494Sobrien */
410174299Sobrien#ifdef HAVE_SYS_MMAN_H
411174299Sobrien# include <sys/mman.h>
412174299Sobrien#endif /* HAVE_SYS_MMAN_H */
41338494Sobrien
41438494Sobrien/*
41538494Sobrien * Actions to take if <netdb.h> exists.
41638494Sobrien */
41738494Sobrien#ifdef HAVE_NETDB_H
41838494Sobrien# include <netdb.h>
41938494Sobrien#endif /* HAVE_NETDB_H */
42038494Sobrien
42138494Sobrien/*
42238494Sobrien * Actions to take if <netdir.h> exists.
42338494Sobrien */
42438494Sobrien#ifdef HAVE_NETDIR_H
42538494Sobrien# include <netdir.h>
42638494Sobrien#endif /* HAVE_NETDIR_H */
42738494Sobrien
42838494Sobrien/*
42938494Sobrien * Actions to take if <net/if_var.h> exists.
43038494Sobrien */
43138494Sobrien#ifdef HAVE_NET_IF_VAR_H
43238494Sobrien# include <net/if_var.h>
43338494Sobrien#endif /* HAVE_NET_IF_VAR_H */
43438494Sobrien
43538494Sobrien/*
43638494Sobrien * Actions to take if <netinet/if_ether.h> exists.
43738494Sobrien */
43838494Sobrien#ifdef HAVE_NETINET_IF_ETHER_H
43938494Sobrien# include <netinet/if_ether.h>
44038494Sobrien#endif /* HAVE_NETINET_IF_ETHER_H */
44138494Sobrien
44238494Sobrien/*
44338494Sobrien * Actions to take if <netinet/in.h> exists.
44438494Sobrien */
44538494Sobrien#ifdef HAVE_NETINET_IN_H
44638494Sobrien# include <netinet/in.h>
44738494Sobrien#endif /* HAVE_NETINET_IN_H */
44838494Sobrien
44938494Sobrien/*
45038494Sobrien * Actions to take if <rpcsvc/yp_prot.h> exists.
45138494Sobrien */
45238494Sobrien#ifdef HAVE_RPCSVC_YP_PROT_H
45342633Sobrien# ifdef HAVE_BAD_HEADERS
45442633Sobrien/* avoid circular dependency in aix 4.3 with <rpcsvc/ypclnt.h> */
45542633Sobrienstruct ypall_callback;
45642633Sobrien# endif /* HAVE_BAD_HEADERS */
45738494Sobrien# include <rpcsvc/yp_prot.h>
45838494Sobrien#endif /* HAVE_RPCSVC_YP_PROT_H */
45938494Sobrien
46038494Sobrien/*
46138494Sobrien * Actions to take if <rpcsvc/ypclnt.h> exists.
46238494Sobrien */
46338494Sobrien#ifdef HAVE_RPCSVC_YPCLNT_H
46438494Sobrien# include <rpcsvc/ypclnt.h>
46538494Sobrien#endif /* HAVE_RPCSVC_YPCLNT_H */
46638494Sobrien
46738494Sobrien/*
46838494Sobrien * Actions to take if <sys/ucred.h> exists.
46938494Sobrien */
47038494Sobrien#ifdef HAVE_SYS_UCRED_H
47138494Sobrien# include <sys/ucred.h>
47238494Sobrien#endif /* HAVE_SYS_UCRED_H */
47338494Sobrien
47438494Sobrien
47538494Sobrien/*
47638494Sobrien * Actions to take if <sys/mount.h> exists.
47738494Sobrien */
47838494Sobrien#ifdef HAVE_SYS_MOUNT_H
47938494Sobrien/*
48038494Sobrien * Some operating systems must define these variables to get
48138494Sobrien * NFS and other definitions included.
48238494Sobrien */
48338494Sobrien# ifndef NFSCLIENT
48482805Sobrien#  define NFSCLIENT 1
48538494Sobrien# endif /* not NFSCLIENT */
48638494Sobrien# ifndef NFS
48782805Sobrien#  define NFS 1
48838494Sobrien# endif /* not NFS */
48938494Sobrien# ifndef PCFS
49082805Sobrien#  define PCFS 1
49138494Sobrien# endif /* not PCFS */
49238494Sobrien# ifndef LOFS
49382805Sobrien#  define LOFS 1
49438494Sobrien# endif /* not LOFS */
49538494Sobrien# ifndef RFS
49682805Sobrien#  define RFS 1
49738494Sobrien# endif /* not RFS */
49838494Sobrien# ifndef MSDOSFS
49982805Sobrien#  define MSDOSFS 1
50038494Sobrien# endif /* not MSDOSFS */
50138494Sobrien# ifndef MFS
50282805Sobrien#  define MFS 1
50338494Sobrien# endif /* not MFS */
50438494Sobrien# ifndef CD9660
50582805Sobrien#  define CD9660 1
50638494Sobrien# endif /* not CD9660 */
50738494Sobrien# include <sys/mount.h>
50838494Sobrien#endif /* HAVE_SYS_MOUNT_H */
50938494Sobrien
51038494Sobrien#ifdef HAVE_SYS_VMOUNT_H
51138494Sobrien# include <sys/vmount.h>
51238494Sobrien#endif /* HAVE_SYS_VMOUNT_H */
51338494Sobrien
51438494Sobrien/*
51538494Sobrien * Actions to take if <linux/fs.h> exists.
51682805Sobrien * There is no point in including this on a glibc2 system,
51782805Sobrien * we're only asking for trouble
51838494Sobrien */
51982805Sobrien#if defined HAVE_LINUX_FS_H && (!defined __GLIBC__ || __GLIBC__ < 2)
52038494Sobrien/*
52151300Sobrien * There are various conflicts in definitions between RedHat Linux, newer
52251300Sobrien * 2.2 kernels, and <netinet/in.h> and <linux/fs.h>.
52338494Sobrien */
52438494Sobrien# ifdef HAVE_SOCKETBITS_H
52538494Sobrien/* conflicts with <socketbits.h> */
52638494Sobrien#  define _LINUX_SOCKET_H
52738494Sobrien#  undef BLKFLSBUF
52838494Sobrien#  undef BLKGETSIZE
52938494Sobrien#  undef BLKRAGET
53038494Sobrien#  undef BLKRASET
53138494Sobrien#  undef BLKROGET
53238494Sobrien#  undef BLKROSET
53338494Sobrien#  undef BLKRRPART
53438494Sobrien#  undef MS_MGC_VAL
53538494Sobrien#  undef MS_RMT_MASK
53651300Sobrien#  if defined(__GLIBC__) && __GLIBC__ >= 2
53738494Sobrien/* conflicts with <waitflags.h> */
53851300Sobrien#   undef WNOHANG
53951300Sobrien#   undef WUNTRACED
54051300Sobrien#  endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */
54138494Sobrien/* conflicts with <statfsbuf.h> */
54238494Sobrien#  define _SYS_STATFS_H
54338494Sobrien# endif /* HAVE_SOCKETBITS_H */
54451300Sobrien
54551300Sobrien# ifdef _SYS_WAIT_H
54651300Sobrien#  if defined(__GLIBC__) && __GLIBC__ >= 2
54751300Sobrien/* conflicts with <bits/waitflags.h> (RedHat/Linux 6.0 and kernels 2.2 */
54851300Sobrien#   undef WNOHANG
54951300Sobrien#   undef WUNTRACED
55051300Sobrien#  endif /* defined(__GLIBC__) && __GLIBC__ >= 2 */
55151300Sobrien# endif /* _SYS_WAIT_H */
55251300Sobrien
55341145Sobrien# ifdef HAVE_LINUX_POSIX_TYPES_H
55441145Sobrien#  include <linux/posix_types.h>
55541145Sobrien# endif /* HAVE_LINUX_POSIX_TYPES_H */
55641145Sobrien# ifndef _LINUX_BYTEORDER_GENERIC_H
55741145Sobrien#  define _LINUX_BYTEORDER_GENERIC_H
55841145Sobrien# endif /* _LINUX_BYTEORDER_GENERIC_H */
55951300Sobrien/* conflicts with <sys/mount.h> in 2.[12] kernels */
56041145Sobrien# ifdef _SYS_MOUNT_H
56151300Sobrien#  undef BLKFLSBUF
56251300Sobrien#  undef BLKGETSIZE
56351300Sobrien#  undef BLKRAGET
56451300Sobrien#  undef BLKRASET
56551300Sobrien#  undef BLKROGET
56651300Sobrien#  undef BLKROSET
56751300Sobrien#  undef BLKRRPART
56851300Sobrien#  undef BLOCK_SIZE
56951300Sobrien#  undef MS_MANDLOCK
57051300Sobrien#  undef MS_MGC_VAL
57151300Sobrien#  undef MS_NOATIME
57251300Sobrien#  undef MS_NODEV
57351300Sobrien#  undef MS_NODIRATIME
57451300Sobrien#  undef MS_NOEXEC
57551300Sobrien#  undef MS_NOSUID
57651300Sobrien#  undef MS_RDONLY
57751300Sobrien#  undef MS_REMOUNT
57851300Sobrien#  undef MS_RMT_MASK
57951300Sobrien#  undef MS_SYNCHRONOUS
58051300Sobrien#  undef S_APPEND
58151300Sobrien#  undef S_IMMUTABLE
58251300Sobrien/* conflicts with <statfsbuf.h> */
58351300Sobrien#  define _SYS_STATFS_H
58441145Sobrien# endif /* _SYS_MOUNT_H */
58582805Sobrien# ifndef _LINUX_STRING_H_
58682805Sobrien#  define _LINUX_STRING_H_
58782805Sobrien# endif /* not _LINUX_STRING_H_ */
58882805Sobrien# ifdef HAVE_LINUX_KDEV_T_H
58982805Sobrien#  define __KERNEL__
59082805Sobrien#  include <linux/kdev_t.h>
59182805Sobrien#  undef __KERNEL__
59282805Sobrien# endif /* HAVE_LINUX_KDEV_T_H */
59382805Sobrien# ifdef HAVE_LINUX_LIST_H
59482805Sobrien#  define __KERNEL__
59582805Sobrien#  include <linux/list.h>
59682805Sobrien#  undef __KERNEL__
59782805Sobrien# endif /* HAVE_LINUX_LIST_H */
59838494Sobrien# include <linux/fs.h>
59982805Sobrien#endif /* HAVE_LINUX_FS_H && (!__GLIBC__ || __GLIBC__ < 2) */
60038494Sobrien
60138494Sobrien#ifdef HAVE_CDFS_CDFS_MOUNT_H
60238494Sobrien# include <cdfs/cdfs_mount.h>
60338494Sobrien#endif /* HAVE_CDFS_CDFS_MOUNT_H */
60438494Sobrien
60538494Sobrien#ifdef HAVE_CDFS_CDFSMOUNT_H
60638494Sobrien# include <cdfs/cdfsmount.h>
60738494Sobrien#endif /* HAVE_CDFS_CDFSMOUNT_H */
60838494Sobrien
60938494Sobrien/*
610174299Sobrien * Actions to take if <linux/loop.h> exists.
611174299Sobrien */
612174299Sobrien#ifdef HAVE_LINUX_LOOP_H
613174299Sobrien# ifdef HAVE_LINUX_POSIX_TYPES_H
614174299Sobrien#  include <linux/posix_types.h>
615174299Sobrien# endif /* HAVE_LINUX_POSIX_TYPES_H */
616174299Sobrien/* next dev_t lines needed due to changes in kernel code */
617174299Sobrien# undef dev_t
618174299Sobrien# define dev_t unsigned short	/* compatible with Red Hat and SuSE */
619174299Sobrien# include <linux/loop.h>
620174299Sobrien#endif /* HAVE_LINUX_LOOP_H */
621174299Sobrien
622174299Sobrien/*
623174299Sobrien * AUTOFS PROTOCOL HEADER FILES:
624174299Sobrien */
625174299Sobrien
626174299Sobrien/*
627174299Sobrien * Actions to take if <linux/auto_fs[4].h> exists.
62882805Sobrien * We really don't want <linux/fs.h> pulled in here
62938494Sobrien */
63082805Sobrien#ifndef _LINUX_FS_H
63182805Sobrien#define _LINUX_FS_H
63282805Sobrien#endif /* _LINUX_FS_H */
633174299Sobrien#ifdef HAVE_LINUX_AUTO_FS4_H
634174299Sobrien# include <linux/auto_fs4.h>
635174299Sobrien#else  /* not HAVE_LINUX_AUTO_FS4_H */
636174299Sobrien# ifdef HAVE_LINUX_AUTO_FS_H
637174299Sobrien#  include <linux/auto_fs.h>
638174299Sobrien# endif /* HAVE_LINUX_AUTO_FS_H */
639174299Sobrien#endif /* not HAVE_LINUX_AUTO_FS4_H */
64038494Sobrien
64138494Sobrien/*
642174299Sobrien * Actions to take if <sys/fs/autofs.h> exists.
643174299Sobrien */
644174299Sobrien#ifdef HAVE_SYS_FS_AUTOFS_H
645174299Sobrien# include <sys/fs/autofs.h>
646174299Sobrien#endif /* HAVE_SYS_FS_AUTOFS_H */
647174299Sobrien
648174299Sobrien/*
649174299Sobrien * Actions to take if <rpcsvc/autofs_prot.h> or <sys/fs/autofs_prot.h> exist.
650174299Sobrien */
651174299Sobrien#ifdef HAVE_RPCSVC_AUTOFS_PROT_H
652174299Sobrien# include <rpcsvc/autofs_prot.h>
653174299Sobrien#else  /* not HAVE_RPCSVC_AUTOFS_PROT_H */
654174299Sobrien# ifdef HAVE_SYS_FS_AUTOFS_PROT_H
655174299Sobrien#  include <sys/fs/autofs_prot.h>
656174299Sobrien# endif /* HAVE_SYS_FS_AUTOFS_PROT_H */
657174299Sobrien#endif /* not HAVE_RPCSVC_AUTOFS_PROT_H */
658174299Sobrien
659174299Sobrien/*
660174299Sobrien * Actions to take if <lber.h> exists.
661174299Sobrien * This header file is required before <ldap.h> can be included.
662174299Sobrien */
663174299Sobrien#ifdef HAVE_LBER_H
664174299Sobrien# include <lber.h>
665174299Sobrien#endif /* HAVE_LBER_H */
666174299Sobrien
667174299Sobrien/*
668174299Sobrien * Actions to take if <ldap.h> exists.
669174299Sobrien */
670174299Sobrien#ifdef HAVE_LDAP_H
671174299Sobrien# include <ldap.h>
672174299Sobrien#endif /* HAVE_LDAP_H */
673174299Sobrien
674174299Sobrien/****************************************************************************
675174299Sobrien ** IMPORTANT!!!							   **
676174299Sobrien ** We always include am-utils' amu_autofs_prot.h.			   **
677174299Sobrien ** That is actually defined in "conf/autofs/autofs_${autofs_style}.h"     **
678174299Sobrien ****************************************************************************/
679174299Sobrien#include <amu_autofs_prot.h>
680174299Sobrien
681174299Sobrien
682174299Sobrien/*
68338494Sobrien * NFS PROTOCOL HEADER FILES:
68438494Sobrien */
68538494Sobrien
68638494Sobrien/*
68738494Sobrien * Actions to take if <nfs/export.h> exists.
68838494Sobrien */
68938494Sobrien#ifdef HAVE_NFS_EXPORT_H
69038494Sobrien# include <nfs/export.h>
69138494Sobrien#endif /* HAVE_NFS_EXPORT_H */
69238494Sobrien
69338494Sobrien/****************************************************************************
69438494Sobrien ** IMPORTANT!!!							   **
695174299Sobrien ** We always include am-utils' amu_nfs_prot.h.				   **
69638494Sobrien ** That is actually defined in "conf/nfs_prot/nfs_prot_${host_os_name}.h" **
69738494Sobrien ****************************************************************************/
69838494Sobrien#include <amu_nfs_prot.h>
69938494Sobrien
70038494Sobrien/*
70138494Sobrien * DO NOT INCLUDE THESE FILES:
70238494Sobrien * They conflicts with other NFS headers and are generally not needed.
70338494Sobrien */
70438494Sobrien#ifdef DO_NOT_INCLUDE
70538494Sobrien# ifdef HAVE_NFS_NFS_CLNT_H
70638494Sobrien#  include <nfs/nfs_clnt.h>
70738494Sobrien# endif /* HAVE_NFS_NFS_CLNT_H */
70838494Sobrien# ifdef HAVE_LINUX_NFS_H
70938494Sobrien#  include <linux/nfs.h>
71038494Sobrien# endif /* HAVE_LINUX_NFS_H */
71138494Sobrien#endif /* DO NOT INCLUDE */
71238494Sobrien
71338494Sobrien/*
71438494Sobrien * Actions to take if one of the nfs headers exists.
71538494Sobrien */
71638494Sobrien#ifdef HAVE_NFS_NFS_GFS_H
71738494Sobrien# include <nfs/nfs_gfs.h>
71838494Sobrien#endif /* HAVE_NFS_NFS_GFS_H */
71938494Sobrien#ifdef HAVE_NFS_MOUNT_H
72038494Sobrien# include <nfs/mount.h>
72138494Sobrien#endif /* HAVE_NFS_MOUNT_H */
72238494Sobrien#ifdef HAVE_NFS_NFS_MOUNT_H_off
72382805Sobrien/* broken on nextstep3 (includes non-existing headers) */
72438494Sobrien# include <nfs/nfs_mount.h>
72538494Sobrien#endif /* HAVE_NFS_NFS_MOUNT_H */
72638494Sobrien#ifdef HAVE_NFS_PATHCONF_H
72738494Sobrien# include <nfs/pathconf.h>
72838494Sobrien#endif /* HAVE_NFS_PATHCONF_H */
72938494Sobrien#ifdef HAVE_SYS_FS_NFS_MOUNT_H
73038494Sobrien# include <sys/fs/nfs/mount.h>
73138494Sobrien#endif /* HAVE_SYS_FS_NFS_MOUNT_H */
73238494Sobrien#ifdef HAVE_SYS_FS_NFS_NFS_CLNT_H
73338494Sobrien# include <sys/fs/nfs/nfs_clnt.h>
73438494Sobrien#endif /* HAVE_SYS_FS_NFS_NFS_CLNT_H */
73538494Sobrien#ifdef HAVE_SYS_FS_NFS_CLNT_H
73638494Sobrien# include <sys/fs/nfs_clnt.h>
73738494Sobrien#endif /* HAVE_SYS_FS_NFS_CLNT_H */
738174299Sobrien
739174299Sobrien/* complex rules for linux/nfs_mount.h: broken on so many systems */
74038494Sobrien#ifdef HAVE_LINUX_NFS_MOUNT_H
741174299Sobrien# ifndef _LINUX_NFS_H
742174299Sobrien#  define _LINUX_NFS_H
743174299Sobrien# endif /* not _LINUX_NFS_H */
744174299Sobrien# ifndef _LINUX_NFS2_H
745174299Sobrien#  define _LINUX_NFS2_H
746174299Sobrien# endif /* not _LINUX_NFS2_H */
747174299Sobrien# ifndef _LINUX_NFS3_H
748174299Sobrien#  define _LINUX_NFS3_H
749174299Sobrien# endif /* not _LINUX_NFS3_H */
750174299Sobrien# ifndef _LINUX_NFS_FS_H
751174299Sobrien#  define _LINUX_NFS_FS_H
752174299Sobrien# endif /* not _LINUX_NFS_FS_H */
753174299Sobrien# ifndef _LINUX_IN_H
754174299Sobrien#  define _LINUX_IN_H
755174299Sobrien# endif /* not _LINUX_IN_H */
756174299Sobrien# ifndef __KERNEL__
757174299Sobrien#  define __KERNEL__
758174299Sobrien# endif /* __KERNEL__ */
75938494Sobrien# include <linux/nfs_mount.h>
760174299Sobrien# undef __KERNEL__
76138494Sobrien#endif /* HAVE_LINUX_NFS_MOUNT_H */
76238494Sobrien
76338494Sobrien/*
76438494Sobrien * Actions to take if <pwd.h> exists.
76538494Sobrien */
76638494Sobrien#ifdef HAVE_PWD_H
76738494Sobrien# include <pwd.h>
76838494Sobrien#endif /* HAVE_PWD_H */
76938494Sobrien
77038494Sobrien/*
77138494Sobrien * Actions to take if <hesiod.h> exists.
77238494Sobrien */
77338494Sobrien#ifdef HAVE_HESIOD_H
77438494Sobrien# include <hesiod.h>
77538494Sobrien#endif /* HAVE_HESIOD_H */
77638494Sobrien
77738494Sobrien/*
77838494Sobrien * Actions to take if <arpa/nameser.h> exists.
77938494Sobrien * Should be included before <resolv.h>.
78038494Sobrien */
78138494Sobrien#ifdef HAVE_ARPA_NAMESER_H
78238494Sobrien# ifdef NOERROR
78338494Sobrien#  undef NOERROR
78438494Sobrien# endif /* NOERROR */
78538494Sobrien/*
78638494Sobrien * Conflicts with <sys/tpicommon.h> which is included from <sys/tiuser.h>
78738494Sobrien * on Solaris 2.6 systems.  So undefine it first.
78838494Sobrien */
78938494Sobrien# ifdef T_UNSPEC
79038494Sobrien#  undef T_UNSPEC
79138494Sobrien# endif /* T_UNSPEC */
79238494Sobrien# include <arpa/nameser.h>
79338494Sobrien#endif /* HAVE_ARPA_NAMESER_H */
79438494Sobrien
79538494Sobrien/*
79638494Sobrien * Actions to take if <arpa/inet.h> exists.
79738494Sobrien */
79838494Sobrien#ifdef HAVE_ARPA_INET_H
79942633Sobrien# ifdef HAVE_BAD_HEADERS
80042633Sobrien/* aix 4.3: avoid including <net/if_dl.h> */
80142633Sobrienstruct sockaddr_dl;
80242633Sobrien# endif /* HAVE_BAD_HEADERS */
80338494Sobrien# include <arpa/inet.h>
80438494Sobrien#endif /* HAVE_ARPA_INET_H */
80538494Sobrien
80638494Sobrien/*
80738494Sobrien * Actions to take if <resolv.h> exists.
80838494Sobrien */
80938494Sobrien#ifdef HAVE_RESOLV_H
810174299Sobrien/*
811174299Sobrien * On AIX 5.2, both <resolv.h> and <arpa/nameser_compat.h> define MAXDNAME,
812174299Sobrien * if compiling with gcc -D_USE_IRS (so that we get extern definitions for
813174299Sobrien * hstrerror() and others).
814174299Sobrien */
815174299Sobrien# if defined(_AIX) && defined(MAXDNAME) && defined(_USE_IRS)
816174299Sobrien#  undef MAXDNAME
817174299Sobrien# endif /* defined(_AIX) && defined(MAXDNAME) && defined(_USE_IRS) */
81838494Sobrien# include <resolv.h>
81938494Sobrien#endif /* HAVE_RESOLV_H */
82038494Sobrien
82138494Sobrien/*
82238494Sobrien * Actions to take if <sys/uio.h> exists.
82338494Sobrien */
82438494Sobrien#ifdef HAVE_SYS_UIO_H
82538494Sobrien# include <sys/uio.h>
82638494Sobrien#endif /* HAVE_SYS_UIO_H */
82738494Sobrien
82838494Sobrien/*
82938494Sobrien * Actions to take if <sys/fs/cachefs_fs.h> exists.
83038494Sobrien */
83138494Sobrien#ifdef HAVE_SYS_FS_CACHEFS_FS_H
83238494Sobrien# include <sys/fs/cachefs_fs.h>
83338494Sobrien#endif /* HAVE_SYS_FS_CACHEFS_FS_H */
83438494Sobrien
83538494Sobrien/*
83638494Sobrien * Actions to take if <sys/fs/pc_fs.h> exists.
83738494Sobrien */
83838494Sobrien#ifdef HAVE_SYS_FS_PC_FS_H
83938494Sobrien# include <sys/fs/pc_fs.h>
84038494Sobrien#endif /* HAVE_SYS_FS_PC_FS_H */
84138494Sobrien
84238494Sobrien/*
84338494Sobrien * Actions to take if <msdosfs/msdosfsmount.h> exists.
84438494Sobrien */
84538494Sobrien#ifdef HAVE_MSDOSFS_MSDOSFSMOUNT_H
84638494Sobrien# include <msdosfs/msdosfsmount.h>
84782805Sobrien#endif /* HAVE_MSDOSFS_MSDOSFSMOUNT_H */
84882805Sobrien#ifdef HAVE_FS_MSDOSFS_MSDOSFSMOUNT_H
84982805Sobrien# include <fs/msdosfs/msdosfsmount.h>
85082805Sobrien#endif /* HAVE_FS_MSDOSFS_MSDOSFSMOUNT_H */
85138494Sobrien
85238494Sobrien/*
853174299Sobrien * Actions to take if <fs/msdosfs/msdosfsmount.h> exists.
854174299Sobrien */
855174299Sobrien#ifdef HAVE_FS_MSDOSFS_MSDOSFSMOUNT_H
856174299Sobrien# include <fs/msdosfs/msdosfsmount.h>
857174299Sobrien#endif /* HAVE_FS_MSDOSFS_MSDOSFSMOUNT_H */
858174299Sobrien
859174299Sobrien/*
86038494Sobrien * Actions to take if <sys/fs/tmp.h> exists.
86138494Sobrien */
86238494Sobrien#ifdef HAVE_SYS_FS_TMP_H
86338494Sobrien# include <sys/fs/tmp.h>
86438494Sobrien#endif /* HAVE_SYS_FS_TMP_H */
865310490Scy#ifdef HAVE_FS_TMPFS_TMPFS_ARGS_H
866310490Scy# include <fs/tmpfs/tmpfs_args.h>
867310490Scy#endif /* HAVE_FS_TMPFS_TMPFS_ARGS_H */
86838494Sobrien
869310490Scy
87038494Sobrien/*
87138494Sobrien * Actions to take if <sys/fs/ufs_mount.h> exists.
87238494Sobrien */
87338494Sobrien#ifdef HAVE_SYS_FS_UFS_MOUNT_H
87438494Sobrien# include <sys/fs/ufs_mount.h>
87538494Sobrien#endif /* HAVE_SYS_FS_UFS_MOUNT_H */
87682815Sobrien/*
87782815Sobrien * HAVE_UFS_UFS_UFSMOUNT_H should NOT be defined on netbsd/openbsd because it
87882815Sobrien * causes errors with other header files.  Instead, add it to the specific
87982815Sobrien * conf/nfs_prot_*.h file.
88082815Sobrien */
88182815Sobrien#ifdef	HAVE_UFS_UFS_UFSMOUNT_H
88251300Sobrien# include <ufs/ufs/ufsmount.h>
88351300Sobrien#endif	/* HAVE_UFS_UFS_UFSMOUNT_H */
88438494Sobrien
88538494Sobrien/*
88638494Sobrien * Actions to take if <sys/fs/efs_clnt.h> exists.
88738494Sobrien */
88838494Sobrien#ifdef HAVE_SYS_FS_EFS_CLNT_H
88938494Sobrien# include <sys/fs/efs_clnt.h>
89038494Sobrien#endif /* HAVE_SYS_FS_EFS_CLNT_H */
891310490Scy#ifdef HAVE_FS_EFS_EFS_MOUNT_H
892310490Scy# include <fs/efs/efs_mount.h>
893310490Scy#endif /* HAVE_FS_EFS_EFS_MOUNT_H */
89438494Sobrien
89538494Sobrien/*
89638494Sobrien * Actions to take if <sys/fs/xfs_clnt.h> exists.
89738494Sobrien */
89838494Sobrien#ifdef HAVE_SYS_FS_XFS_CLNT_H
89938494Sobrien# include <sys/fs/xfs_clnt.h>
90038494Sobrien#endif /* HAVE_SYS_FS_XFS_CLNT_H */
90138494Sobrien
90238494Sobrien/*
90338494Sobrien * Actions to take if <assert.h> exists.
90438494Sobrien */
90538494Sobrien#ifdef HAVE_ASSERT_H
90638494Sobrien# include <assert.h>
90738494Sobrien#endif /* HAVE_ASSERT_H */
90838494Sobrien
90938494Sobrien/*
91038494Sobrien * Actions to take if <cfs.h> exists.
91138494Sobrien */
91238494Sobrien#ifdef HAVE_CFS_H
91338494Sobrien# include <cfs.h>
91438494Sobrien#endif /* HAVE_CFS_H */
91538494Sobrien
91638494Sobrien/*
91738494Sobrien * Actions to take if <cluster.h> exists.
91838494Sobrien */
91938494Sobrien#ifdef HAVE_CLUSTER_H
92038494Sobrien# include <cluster.h>
92138494Sobrien#endif /* HAVE_CLUSTER_H */
92238494Sobrien
92338494Sobrien/*
92438494Sobrien * Actions to take if <ctype.h> exists.
92538494Sobrien */
92638494Sobrien#ifdef HAVE_CTYPE_H
92738494Sobrien# include <ctype.h>
92838494Sobrien#endif /* HAVE_CTYPE_H */
92938494Sobrien
93038494Sobrien/*
93138494Sobrien * Actions to take if <errno.h> exists.
93238494Sobrien */
93338494Sobrien#ifdef HAVE_ERRNO_H
93438494Sobrien# include <errno.h>
935310490Scy#else
936310490Scy/*
937310490Scy * Actions to take if <sys/errno.h> exists.
938310490Scy */
939310490Scy# ifdef HAVE_SYS_ERRNO_H
940310490Scy#  include <sys/errno.h>
941310490Scyextern int errno;
942310490Scy# endif /* HAVE_SYS_ERRNO_H */
94338494Sobrien#endif /* HAVE_ERRNO_H */
94438494Sobrien
94538494Sobrien/*
94638494Sobrien * Actions to take if <grp.h> exists.
94738494Sobrien */
94838494Sobrien#ifdef HAVE_GRP_H
94938494Sobrien# include <grp.h>
95038494Sobrien#endif /* HAVE_GRP_H */
95138494Sobrien
95238494Sobrien/*
95338494Sobrien * Actions to take if <hsfs/hsfs.h> exists.
95438494Sobrien */
95538494Sobrien#ifdef HAVE_HSFS_HSFS_H
95638494Sobrien# include <hsfs/hsfs.h>
95738494Sobrien#endif /* HAVE_HSFS_HSFS_H */
95838494Sobrien
95938494Sobrien/*
96038494Sobrien * Actions to take if <cdfs/cdfsmount.h> exists.
96138494Sobrien */
96238494Sobrien#ifdef HAVE_CDFS_CDFSMOUNT_H
96338494Sobrien# include <cdfs/cdfsmount.h>
96438494Sobrien#endif /* HAVE_CDFS_CDFSMOUNT_H */
96538494Sobrien
96638494Sobrien/*
96738494Sobrien * Actions to take if <isofs/cd9660/cd9660_mount.h> exists.
96838494Sobrien */
96938494Sobrien#ifdef HAVE_ISOFS_CD9660_CD9660_MOUNT_H
97038494Sobrien# include <isofs/cd9660/cd9660_mount.h>
97138494Sobrien#endif /* HAVE_ISOFS_CD9660_CD9660_MOUNT_H */
97238494Sobrien
97338494Sobrien/*
974310490Scy * Actions to take if <fs/udf/udf_mount.h> exists.
975310490Scy */
976310490Scy#ifdef HAVE_FS_UDF_UDF_MOUNT_H
977310490Scy# include <fs/udf/udf_mount.h>
978310490Scy#endif /* HAVE_FS_UDF_UDF_MOUNT_H */
979310490Scy
980310490Scy/*
98138494Sobrien * Actions to take if <mount.h> exists.
98238494Sobrien */
98338494Sobrien#ifdef HAVE_MOUNT_H
98438494Sobrien# include <mount.h>
98538494Sobrien#endif /* HAVE_MOUNT_H */
98638494Sobrien
98738494Sobrien/*
98838494Sobrien * Actions to take if <nsswitch.h> exists.
98938494Sobrien */
99038494Sobrien#ifdef HAVE_NSSWITCH_H
99138494Sobrien# include <nsswitch.h>
99238494Sobrien#endif /* HAVE_NSSWITCH_H */
99338494Sobrien
99438494Sobrien/*
99538494Sobrien * Actions to take if <rpc/auth_des.h> exists.
99638494Sobrien */
99738494Sobrien#ifdef HAVE_RPC_AUTH_DES_H
99838494Sobrien# include <rpc/auth_des.h>
99938494Sobrien#endif /* HAVE_RPC_AUTH_DES_H */
100038494Sobrien
100138494Sobrien/*
100238494Sobrien * Actions to take if <rpc/pmap_clnt.h> exists.
100338494Sobrien */
100438494Sobrien#ifdef HAVE_RPC_PMAP_CLNT_H
100538494Sobrien# include <rpc/pmap_clnt.h>
100638494Sobrien#endif /* HAVE_RPC_PMAP_CLNT_H */
100738494Sobrien
100838494Sobrien/*
100938494Sobrien * Actions to take if <rpc/pmap_prot.h> exists.
101038494Sobrien */
101138494Sobrien#ifdef HAVE_RPC_PMAP_PROT_H
101238494Sobrien# include <rpc/pmap_prot.h>
101338494Sobrien#endif /* HAVE_RPC_PMAP_PROT_H */
101438494Sobrien
101538494Sobrien
101638494Sobrien/*
101738494Sobrien * Actions to take if <rpcsvc/mount.h> exists.
101838494Sobrien * AIX does not protect against this file doubly included,
101938494Sobrien * so I have to do my own protection here.
102038494Sobrien */
102138494Sobrien#ifdef HAVE_RPCSVC_MOUNT_H
102238494Sobrien# ifndef _RPCSVC_MOUNT_H
102338494Sobrien#  include <rpcsvc/mount.h>
102438494Sobrien# endif /* not _RPCSVC_MOUNT_H */
102538494Sobrien#endif /* HAVE_RPCSVC_MOUNT_H */
102638494Sobrien
102738494Sobrien/*
102838494Sobrien * Actions to take if <rpcsvc/nis.h> exists.
102938494Sobrien */
103038494Sobrien#ifdef HAVE_RPCSVC_NIS_H
1031174299Sobrien/*
1032174299Sobrien * Solaris 10 (build 72) defines GROUP_OBJ in <sys/acl.h>, which is included
1033174299Sobrien * in many other header files.  <rpcsvc/nis.h> uses GROUP_OBJ inside enum
1034174299Sobrien * zotypes.  So if you're unlucky enough to include both headers, you get a
1035174299Sobrien * compile error because the two symbols conflict.
1036174299Sobrien * A similar conflict arises with Sun cc and the definition of "GROUP".
1037174299Sobrien *
1038174299Sobrien * Temp hack: undefine acl.h's GROUP_OBJ and GROUP because they're not needed
1039174299Sobrien * for am-utils.
1040174299Sobrien */
1041174299Sobrien# ifdef GROUP_OBJ
1042174299Sobrien#  undef GROUP_OBJ
1043174299Sobrien# endif /* GROUP_OBJ */
1044174299Sobrien# ifdef GROUP
1045174299Sobrien#  undef GROUP
1046174299Sobrien# endif /* GROUP */
104738494Sobrien# include <rpcsvc/nis.h>
104838494Sobrien#endif /* HAVE_RPCSVC_NIS_H */
104938494Sobrien
105038494Sobrien/*
105138494Sobrien * Actions to take if <setjmp.h> exists.
105238494Sobrien */
105338494Sobrien#ifdef HAVE_SETJMP_H
105438494Sobrien# include <setjmp.h>
105538494Sobrien#endif /* HAVE_SETJMP_H */
105638494Sobrien
105738494Sobrien/*
105838494Sobrien * Actions to take if <signal.h> exists.
105938494Sobrien */
106038494Sobrien#ifdef HAVE_SIGNAL_H
106138494Sobrien# include <signal.h>
106238494Sobrien#endif /* HAVE_SIGNAL_H */
106338494Sobrien
106438494Sobrien/*
106538494Sobrien * Actions to take if <string.h> exists.
106638494Sobrien */
106738494Sobrien#ifdef HAVE_STRING_H
106838494Sobrien# include <string.h>
106938494Sobrien#endif /* HAVE_STRING_H */
107038494Sobrien
107138494Sobrien/*
107238494Sobrien * Actions to take if <strings.h> exists.
107338494Sobrien */
107438494Sobrien#ifdef HAVE_STRINGS_H
107538494Sobrien# include <strings.h>
107638494Sobrien#endif /* HAVE_STRINGS_H */
107738494Sobrien
107838494Sobrien/*
107938494Sobrien * Actions to take if <sys/config.h> exists.
108038494Sobrien */
108138494Sobrien#ifdef HAVE_SYS_CONFIG_H
108238494Sobrien# include <sys/config.h>
108338494Sobrien#endif /* HAVE_SYS_CONFIG_H */
108438494Sobrien
108538494Sobrien/*
108638494Sobrien * Actions to take if <sys/dg_mount.h> exists.
108738494Sobrien */
108838494Sobrien#ifdef HAVE_SYS_DG_MOUNT_H
108938494Sobrien# include <sys/dg_mount.h>
109038494Sobrien#endif /* HAVE_SYS_DG_MOUNT_H */
109138494Sobrien
109238494Sobrien/*
109338494Sobrien * Actions to take if <sys/fs_types.h> exists.
109438494Sobrien */
109538494Sobrien#ifdef HAVE_SYS_FS_TYPES_H
109638494Sobrien/*
109738494Sobrien * Define KERNEL here to avoid multiple definitions of gt_names[] on
109838494Sobrien * Ultrix 4.3.
109938494Sobrien */
110038494Sobrien# define KERNEL
110138494Sobrien# include <sys/fs_types.h>
110238494Sobrien# undef KERNEL
110338494Sobrien#endif /* HAVE_SYS_FS_TYPES_H */
110438494Sobrien
110538494Sobrien/*
110638494Sobrien * Actions to take if <sys/fstyp.h> exists.
110738494Sobrien */
110838494Sobrien#ifdef HAVE_SYS_FSTYP_H
110938494Sobrien# include <sys/fstyp.h>
111038494Sobrien#endif /* HAVE_SYS_FSTYP_H */
111138494Sobrien
111238494Sobrien/*
111338494Sobrien * Actions to take if <sys/lock.h> exists.
111438494Sobrien */
111538494Sobrien#ifdef HAVE_SYS_LOCK_H
111638494Sobrien# include <sys/lock.h>
111738494Sobrien#endif /* HAVE_SYS_LOCK_H */
111838494Sobrien
111938494Sobrien/*
112038494Sobrien * Actions to take if <sys/machine.h> exists.
112138494Sobrien */
112238494Sobrien#ifdef HAVE_SYS_MACHINE_H
112338494Sobrien# include <sys/machine.h>
112438494Sobrien#endif /* HAVE_SYS_MACHINE_H */
112538494Sobrien
112638494Sobrien/*
112738494Sobrien * Actions to take if <sys/mntctl.h> exists.
112838494Sobrien */
112938494Sobrien#ifdef HAVE_SYS_MNTCTL_H
113038494Sobrien# include <sys/mntctl.h>
113138494Sobrien#endif /* HAVE_SYS_MNTCTL_H */
113238494Sobrien
113338494Sobrien/*
113438494Sobrien * Actions to take if <sys/mnttab.h> exists.
113538494Sobrien */
113638494Sobrien#ifdef HAVE_SYS_MNTTAB_H
113738494Sobrien# include <sys/mnttab.h>
113838494Sobrien#endif /* HAVE_SYS_MNTTAB_H */
113938494Sobrien
114038494Sobrien/*
114138494Sobrien * Actions to take if <mnttab.h> exists.
114238494Sobrien * Do not include it if MNTTAB is already defined because it probably
114338494Sobrien * came from <sys/mnttab.h> and we do not want conflicting definitions.
114438494Sobrien */
114538494Sobrien#if defined(HAVE_MNTTAB_H) && !defined(MNTTAB)
114638494Sobrien# include <mnttab.h>
114738494Sobrien#endif /* defined(HAVE_MNTTAB_H) && !defined(MNTTAB) */
114838494Sobrien
114938494Sobrien/*
115038494Sobrien * Actions to take if <netconfig.h> exists.
115138494Sobrien */
115238494Sobrien#ifdef HAVE_NETCONFIG_H
115338494Sobrien# include <netconfig.h>
115438494Sobrien/* Some systems (Solaris 2.5.1) don't declare this external */
115538494Sobrienextern char *nc_sperror(void);
115638494Sobrien#endif /* HAVE_NETCONFIG_H */
115738494Sobrien
115838494Sobrien/*
115938494Sobrien * Actions to take if <sys/netconfig.h> exists.
116038494Sobrien */
116138494Sobrien#ifdef HAVE_SYS_NETCONFIG_H
116238494Sobrien# include <sys/netconfig.h>
116338494Sobrien#endif /* HAVE_SYS_NETCONFIG_H */
116438494Sobrien
116538494Sobrien/*
116638494Sobrien * Actions to take if <sys/pathconf.h> exists.
116738494Sobrien */
116838494Sobrien#ifdef HAVE_SYS_PATHCONF_H
116938494Sobrien# include <sys/pathconf.h>
117038494Sobrien#endif /* HAVE_SYS_PATHCONF_H */
117138494Sobrien
117238494Sobrien/*
117338494Sobrien * Actions to take if <sys/resource.h> exists.
117438494Sobrien */
117538494Sobrien#ifdef HAVE_SYS_RESOURCE_H
117638494Sobrien# include <sys/resource.h>
117738494Sobrien#endif /* HAVE_SYS_RESOURCE_H */
117838494Sobrien
117938494Sobrien/*
118038494Sobrien * Actions to take if <sys/sema.h> exists.
118138494Sobrien */
118238494Sobrien#ifdef HAVE_SYS_SEMA_H
118338494Sobrien# include <sys/sema.h>
118438494Sobrien#endif /* HAVE_SYS_SEMA_H */
118538494Sobrien
118638494Sobrien/*
118738494Sobrien * Actions to take if <sys/signal.h> exists.
118838494Sobrien */
118938494Sobrien#ifdef HAVE_SYS_SIGNAL_H
119038494Sobrien# include <sys/signal.h>
119138494Sobrien#endif /* HAVE_SYS_SIGNAL_H */
119238494Sobrien
119338494Sobrien/*
119438494Sobrien * Actions to take if <sys/sockio.h> exists.
119538494Sobrien */
119638494Sobrien#ifdef HAVE_SYS_SOCKIO_H
119738494Sobrien# include <sys/sockio.h>
119838494Sobrien#endif /* HAVE_SYS_SOCKIO_H */
119938494Sobrien
120038494Sobrien/*
120138494Sobrien * Actions to take if <sys/syscall.h> exists.
120238494Sobrien */
120338494Sobrien#ifdef HAVE_SYS_SYSCALL_H
120438494Sobrien# include <sys/syscall.h>
120538494Sobrien#endif /* HAVE_SYS_SYSCALL_H */
120638494Sobrien
120738494Sobrien/*
120838494Sobrien * Actions to take if <sys/syslimits.h> exists.
120938494Sobrien */
121038494Sobrien#ifdef HAVE_SYS_SYSLIMITS_H
121138494Sobrien# include <sys/syslimits.h>
121238494Sobrien#endif /* HAVE_SYS_SYSLIMITS_H */
121338494Sobrien
121438494Sobrien/*
121538494Sobrien * Actions to take if <tiuser.h> exists.
121638494Sobrien */
121738494Sobrien#ifdef HAVE_TIUSER_H
121838494Sobrien/*
121942633Sobrien * Some systems like AIX have multiple definitions for T_NULL and others
122038494Sobrien * that are defined first in <arpa/nameser.h>.
122138494Sobrien */
122238494Sobrien# ifdef HAVE_ARPA_NAMESER_H
122338494Sobrien#  ifdef T_NULL
122438494Sobrien#   undef T_NULL
122538494Sobrien#  endif /* T_NULL */
122638494Sobrien#  ifdef T_UNSPEC
122738494Sobrien#   undef T_UNSPEC
122838494Sobrien#  endif /* T_UNSPEC */
122938494Sobrien#  ifdef T_IDLE
123038494Sobrien#   undef T_IDLE
123138494Sobrien#  endif /* T_IDLE */
123238494Sobrien# endif /* HAVE_ARPA_NAMESER_H */
123338494Sobrien# include <tiuser.h>
123438494Sobrien#endif /* HAVE_TIUSER_H */
123538494Sobrien
123638494Sobrien/*
123738494Sobrien * Actions to take if <sys/tiuser.h> exists.
123838494Sobrien */
123938494Sobrien#ifdef HAVE_SYS_TIUSER_H
124038494Sobrien# include <sys/tiuser.h>
124138494Sobrien#endif /* HAVE_SYS_TIUSER_H */
124238494Sobrien
124338494Sobrien/*
124438494Sobrien * Actions to take if <sys/statfs.h> exists.
124538494Sobrien */
124638494Sobrien#ifdef HAVE_SYS_STATFS_H
124738494Sobrien# include <sys/statfs.h>
124838494Sobrien#endif /* HAVE_SYS_STATFS_H */
124938494Sobrien
125038494Sobrien/*
1251174299Sobrien * Actions to take if <sys/statvfs.h> exists.
1252174299Sobrien */
1253174299Sobrien#ifdef HAVE_SYS_STATVFS_H
1254174299Sobrien# include <sys/statvfs.h>
1255174299Sobrien#endif /* HAVE_SYS_STATVFS_H */
1256174299Sobrien
1257174299Sobrien/*
125838494Sobrien * Actions to take if <sys/vfs.h> exists.
125938494Sobrien */
126038494Sobrien#ifdef HAVE_SYS_VFS_H
126138494Sobrien# include <sys/vfs.h>
126238494Sobrien#endif /* HAVE_SYS_VFS_H */
126338494Sobrien
126438494Sobrien/*
126538494Sobrien * Actions to take if <sys/vmount.h> exists.
126638494Sobrien */
126738494Sobrien#ifdef HAVE_SYS_VMOUNT_H
126838494Sobrien# include <sys/vmount.h>
126938494Sobrien#endif /* HAVE_SYS_VMOUNT_H */
127038494Sobrien
127138494Sobrien/*
127238494Sobrien * Actions to take if <ufs/ufs_mount.h> exists.
127338494Sobrien */
127438494Sobrien#ifdef HAVE_UFS_UFS_MOUNT_H
127582805Sobrien# include <ufs/ufs_mount.h>
127682805Sobrien#endif /* HAVE_UFS_UFS_MOUNT_H */
127738494Sobrien
127838494Sobrien/*
127938494Sobrien * Are S_ISDIR, S_ISREG, et al broken?  If not, include <sys/stat.h>.
128038494Sobrien * Turned off the not using sys/stat.h based on if the macros are
128138494Sobrien * "broken", because they incorrectly get reported as broken on
128238494Sobrien * ncr2.
128338494Sobrien */
128438494Sobrien#ifndef STAT_MACROS_BROKEN_notused
128538494Sobrien/*
128638494Sobrien * RedHat Linux 4.2 (alpha) has a problem in the headers that causes
128742633Sobrien * duplicate definitions, and also some other nasty bugs.  Upgrade to Redhat
128838494Sobrien * 5.0!
128938494Sobrien */
129038494Sobrien# ifdef HAVE_SYS_STAT_H
129138494Sobrien/* avoid duplicates or conflicts with <linux/stat.h> (RedHat alpha linux) */
129238494Sobrien#  if defined(S_IFREG) && defined(HAVE_STATBUF_H)
129338494Sobrien#   include <statbuf.h>
129438494Sobrien#   undef S_IFBLK
129538494Sobrien#   undef S_IFCHR
129638494Sobrien#   undef S_IFDIR
129738494Sobrien#   undef S_IFIFO
129838494Sobrien#   undef S_IFLNK
129938494Sobrien#   undef S_IFMT
130038494Sobrien#   undef S_IFREG
130138494Sobrien#   undef S_IFSOCK
130238494Sobrien#   undef S_IRGRP
130338494Sobrien#   undef S_IROTH
130438494Sobrien#   undef S_IRUSR
130538494Sobrien#   undef S_IRWXG
130638494Sobrien#   undef S_IRWXO
130738494Sobrien#   undef S_IRWXU
130838494Sobrien#   undef S_ISBLK
130938494Sobrien#   undef S_ISCHR
131038494Sobrien#   undef S_ISDIR
131138494Sobrien#   undef S_ISFIFO
131238494Sobrien#   undef S_ISGID
131338494Sobrien#   undef S_ISLNK
131438494Sobrien#   undef S_ISREG
131538494Sobrien#   undef S_ISSOCK
131638494Sobrien#   undef S_ISUID
131738494Sobrien#   undef S_ISVTX
131838494Sobrien#   undef S_IWGRP
131938494Sobrien#   undef S_IWOTH
132038494Sobrien#   undef S_IWUSR
132138494Sobrien#   undef S_IXGRP
132238494Sobrien#   undef S_IXOTH
132338494Sobrien#   undef S_IXUSR
132438494Sobrien#  endif /* defined(S_IFREG) && defined(HAVE_STATBUF_H) */
132538494Sobrien#  include <sys/stat.h>
132638494Sobrien# endif /* HAVE_SYS_STAT_H */
132738494Sobrien#endif /* not STAT_MACROS_BROKEN_notused */
132838494Sobrien
132938494Sobrien/*
133038494Sobrien * Actions to take if <stdio.h> exists.
133138494Sobrien */
133238494Sobrien#ifdef HAVE_STDIO_H
133338494Sobrien# include <stdio.h>
133438494Sobrien#endif /* HAVE_STDIO_H */
133538494Sobrien
133638494Sobrien/*
133738494Sobrien * Actions to take if <stdlib.h> exists.
133838494Sobrien */
133938494Sobrien#ifdef HAVE_STDLIB_H
134038494Sobrien# include <stdlib.h>
134138494Sobrien#endif /* HAVE_STDLIB_H */
134238494Sobrien
134338494Sobrien/*
134438494Sobrien * Actions to take if <regex.h> exists.
134538494Sobrien */
134638494Sobrien#ifdef HAVE_REGEX_H
134738494Sobrien# include <regex.h>
134838494Sobrien#endif /* HAVE_REGEX_H */
134938494Sobrien
1350174299Sobrien/*
1351174299Sobrien * Actions to take if <tcpd.h> exists.
1352174299Sobrien */
1353174299Sobrien#if defined(HAVE_TCPD_H) && defined(HAVE_LIBWRAP)
1354174299Sobrien# include <tcpd.h>
1355174299Sobrien#endif /* defined(HAVE_TCPD_H) && defined(HAVE_LIBWRAP) */
135638494Sobrien
1357174299Sobrien
135838494Sobrien/****************************************************************************/
135938494Sobrien/*
136038494Sobrien * Specific macros we're looking for.
136138494Sobrien */
136238494Sobrien#ifndef HAVE_MEMSET
136338494Sobrien# ifdef HAVE_BZERO
136438494Sobrien#  define	memset(ptr, val, len)	bzero((ptr), (len))
136538494Sobrien# else /* not HAVE_BZERO */
136638494Sobrien#  error Cannot find either memset or bzero!
136738494Sobrien# endif /* not HAVE_BZERO */
136838494Sobrien#endif /* not HAVE_MEMSET */
136938494Sobrien
137038494Sobrien#ifndef HAVE_MEMMOVE
137138494Sobrien# ifdef HAVE_BCOPY
137238494Sobrien#  define	memmove(to, from, len)	bcopy((from), (to), (len))
137338494Sobrien# else /* not HAVE_BCOPY */
137438494Sobrien#  error Cannot find either memmove or bcopy!
137538494Sobrien# endif /* not HAVE_BCOPY */
137638494Sobrien#endif /* not HAVE_MEMMOVE */
137738494Sobrien
137838494Sobrien/*
137938494Sobrien * memcmp() is more problematic:
138038494Sobrien * Systems that don't have it, but have bcmp(), will use bcmp() instead.
138138494Sobrien * Those that have it, but it is bad (SunOS 4 doesn't handle
138238494Sobrien * 8 bit comparisons correctly), will get to use am_memcmp().
138338494Sobrien * Otherwise if you have memcmp() and it is good, use it.
138438494Sobrien */
138538494Sobrien#ifdef HAVE_MEMCMP
138638494Sobrien# ifdef HAVE_BAD_MEMCMP
138738494Sobrien#  define	memcmp		am_memcmp
138838494Sobrienextern int am_memcmp(const voidp s1, const voidp s2, size_t len);
138938494Sobrien# endif /* HAVE_BAD_MEMCMP */
139038494Sobrien#else /* not HAVE_MEMCMP */
139138494Sobrien# ifdef HAVE_BCMP
139238494Sobrien#  define	memcmp(a, b, len)	bcmp((a), (b), (len))
139338494Sobrien# endif /* HAVE_BCMP */
139438494Sobrien#endif /* not HAVE_MEMCMP */
139538494Sobrien
139638494Sobrien#ifndef HAVE_SETEUID
139738494Sobrien# ifdef HAVE_SETRESUID
139838494Sobrien#  define	seteuid(x)		setresuid(-1,(x),-1)
139938494Sobrien# else /* not HAVE_SETRESUID */
140038494Sobrien#  error Cannot find either seteuid or setresuid!
140138494Sobrien# endif /* not HAVE_SETRESUID */
140238494Sobrien#endif /* not HAVE_SETEUID */
140338494Sobrien
140438494Sobrien/*
140538494Sobrien * Define type of mntent_t.
140638494Sobrien * Defaults to struct mntent, else struct mnttab.  If neither is found, and
140738494Sobrien * the operating system does keep not mount tables in the kernel, then flag
140838494Sobrien * it as an error.  If neither is found and the OS keeps mount tables in the
140938494Sobrien * kernel, then define our own version of mntent; it will be needed for amd
141038494Sobrien * to keep its own internal version of the mount tables.
141138494Sobrien */
141238494Sobrien#ifdef HAVE_STRUCT_MNTENT
141338494Sobrientypedef struct mntent mntent_t;
141438494Sobrien#else /* not HAVE_STRUCT_MNTENT */
141538494Sobrien# ifdef HAVE_STRUCT_MNTTAB
141638494Sobrientypedef struct mnttab mntent_t;
141738494Sobrien/* map struct mnttab field names to struct mntent field names */
141838494Sobrien#  define mnt_fsname	mnt_special
141938494Sobrien#  define mnt_dir	mnt_mountp
142038494Sobrien#  define mnt_opts	mnt_mntopts
142138494Sobrien#  define mnt_type	mnt_fstype
142238494Sobrien# else /* not HAVE_STRUCT_MNTTAB */
142338494Sobrien#  ifdef MOUNT_TABLE_ON_FILE
142438494Sobrien#   error Could not find definition for struct mntent or struct mnttab!
142538494Sobrien#  else /* not MOUNT_TABLE_ON_FILE */
142638494Sobrientypedef struct _am_mntent {
142738494Sobrien  char	*mnt_fsname;		/* name of mounted file system */
142838494Sobrien  char	*mnt_dir;		/* file system path prefix */
142938494Sobrien  char	*mnt_type;		/* MNTTAB_TYPE_* */
143038494Sobrien  char	*mnt_opts;		/* MNTTAB_OPT_* */
143138494Sobrien  int	mnt_freq;		/* dump frequency, in days */
143238494Sobrien  int	mnt_passno;		/* pass number on parallel fsck */
143338494Sobrien} mntent_t;
143438494Sobrien#  endif /* not MOUNT_TABLE_ON_FILE */
143538494Sobrien# endif /* not HAVE_STRUCT_MNTTAB */
143638494Sobrien#endif /* not HAVE_STRUCT_MNTENT */
143738494Sobrien
1438174299Sobrien/*
1439174299Sobrien * Provide FD_* macros for systems that lack them.
1440174299Sobrien */
1441174299Sobrien#ifndef FD_SET
1442174299Sobrien# define FD_SET(fd, set) (*(set) |= (1 << (fd)))
1443174299Sobrien# define FD_ISSET(fd, set) (*(set) & (1 << (fd)))
1444174299Sobrien# define FD_CLR(fd, set) (*(set) &= ~(1 << (fd)))
1445174299Sobrien# define FD_ZERO(set) (*(set) = 0)
1446174299Sobrien#endif /* not FD_SET */
144738494Sobrien
1448174299Sobrien
144938494Sobrien/*
145038494Sobrien * Complete external definitions missing from some systems.
145138494Sobrien */
145238494Sobrien
145338494Sobrien#ifndef HAVE_EXTERN_SYS_ERRLIST
145482805Sobrienextern const char *const sys_errlist[];
145538494Sobrien#endif /* not HAVE_EXTERN_SYS_ERRLIST */
145638494Sobrien
145738494Sobrien#ifndef HAVE_EXTERN_OPTARG
145838494Sobrienextern char *optarg;
145938494Sobrienextern int optind;
146038494Sobrien#endif /* not HAVE_EXTERN_OPTARG */
146138494Sobrien
146251300Sobrien#if defined(HAVE_CLNT_SPCREATEERROR) && !defined(HAVE_EXTERN_CLNT_SPCREATEERROR)
146351300Sobrienextern char *clnt_spcreateerror(const char *s);
146451300Sobrien#endif /* defined(HAVE_CLNT_SPCREATEERROR) && !defined(HAVE_EXTERN_CLNT_SPCREATEERROR) */
146551300Sobrien
146638494Sobrien#if defined(HAVE_CLNT_SPERRNO) && !defined(HAVE_EXTERN_CLNT_SPERRNO)
146738494Sobrienextern char *clnt_sperrno(const enum clnt_stat num);
146838494Sobrien#endif /* defined(HAVE_CLNT_SPERRNO) && !defined(HAVE_EXTERN_CLNT_SPERRNO) */
146938494Sobrien
147038494Sobrien#ifndef HAVE_EXTERN_FREE
147138494Sobrienextern void free(voidp);
147238494Sobrien#endif /* not HAVE_EXTERN_FREE */
147338494Sobrien
147438494Sobrien#if defined(HAVE_GET_MYADDRESS) && !defined(HAVE_EXTERN_GET_MYADDRESS)
147538494Sobrienextern void get_myaddress(struct sockaddr_in *addr);
147638494Sobrien#endif /* defined(HAVE_GET_MYADDRESS) && !defined(HAVE_EXTERN_GET_MYADDRESS) */
147738494Sobrien
147838494Sobrien#if defined(HAVE_GETDOMAINNAME) && !defined(HAVE_EXTERN_GETDOMAINNAME)
147938494Sobrien# if defined(HAVE_MAP_NIS) || defined(HAVE_MAP_NISPLUS)
148038494Sobrienextern int getdomainname(char *name, int namelen);
148138494Sobrien# endif /* defined(HAVE_MAP_NIS) || defined(HAVE_MAP_NISPLUS) */
148238494Sobrien#endif /* defined(HAVE_GETDOMAINNAME) && !defined(HAVE_EXTERN_GETDOMAINNAME) */
148338494Sobrien
148438494Sobrien#if defined(HAVE_GETDTABLESIZE) && !defined(HAVE_EXTERN_GETDTABLESIZE)
148538494Sobrienextern int getdtablesize(void);
148638494Sobrien#endif /* defined(HAVE_GETDTABLESIZE) && !defined(HAVE_EXTERN_GETDTABLESIZE) */
148738494Sobrien
148838494Sobrien#if defined(HAVE_GETHOSTNAME) && !defined(HAVE_EXTERN_GETHOSTNAME)
148938494Sobrienextern int gethostname(char *name, int namelen);
149038494Sobrien#endif /* defined(HAVE_GETHOSTNAME) && !defined(HAVE_EXTERN_GETHOSTNAME) */
149138494Sobrien
149242633Sobrien#ifndef HAVE_EXTERN_GETLOGIN
149342633Sobrienextern char *getlogin(void);
149442633Sobrien#endif /* not HAVE_EXTERN_GETLOGIN */
149542633Sobrien
149638494Sobrien#if defined(HAVE_GETPAGESIZE) && !defined(HAVE_EXTERN_GETPAGESIZE)
149738494Sobrienextern int getpagesize(void);
149838494Sobrien#endif /* defined(HAVE_GETPAGESIZE) && !defined(HAVE_EXTERN_GETPAGESIZE) */
149938494Sobrien
150038494Sobrien#ifndef HAVE_EXTERN_GETWD
150138494Sobrienextern char *getwd(char *s);
150238494Sobrien#endif /* not HAVE_EXTERN_GETWD */
150338494Sobrien
1504174299Sobrien#if defined(HAVE_TCPD_H) && defined(HAVE_LIBWRAP) && !defined(HAVE_EXTERN_HOSTS_CTL)
1505174299Sobrienextern int hosts_ctl(char *daemon, char *client_name, char *client_addr, char *client_user);
1506174299Sobrien#endif /* defined(HAVE_TCPD_H) && defined(HAVE_LIBWRAP) && !defined(HAVE_EXTERN_HOSTS_CTL) */
1507174299Sobrien
150838494Sobrien#ifndef HAVE_EXTERN_INNETGR
150938494Sobrienextern int innetgr(char *, char *, char *, char *);
151038494Sobrien#endif /* not HAVE_EXTERN_INNETGR */
151138494Sobrien
151238494Sobrien#if defined(HAVE_MKSTEMP) && !defined(HAVE_EXTERN_MKSTEMP)
151338494Sobrienextern int mkstemp(char *);
151438494Sobrien#endif /* defined(HAVE_MKSTEMP) && !defined(HAVE_EXTERN_MKSTEMP) */
151538494Sobrien
151638494Sobrien#ifndef HAVE_EXTERN_SBRK
151738494Sobrienextern caddr_t sbrk(int incr);
151838494Sobrien#endif /* not HAVE_EXTERN_SBRK */
151938494Sobrien
152042633Sobrien#if defined(HAVE_SETEUID) && !defined(HAVE_EXTERN_SETEUID)
152142633Sobrienextern int seteuid(uid_t euid);
152242633Sobrien#endif /* not defined(HAVE_SETEUID) && !defined(HAVE_EXTERN_SETEUID) */
152342633Sobrien
152451595Sobrien#if defined(HAVE_SETITIMER) && !defined(HAVE_EXTERN_SETITIMER)
152551595Sobrienextern int setitimer(int, struct itimerval *, struct itimerval *);
152651595Sobrien#endif /* defined(HAVE_SETITIMER) && !defined(HAVE_EXTERN_SETITIMER) */
152751595Sobrien
1528174299Sobrien#ifndef HAVE_EXTERN_SLEEP
1529174299Sobrienextern unsigned int sleep(unsigned int seconds);
1530174299Sobrien#endif /* not HAVE_EXTERN_SETITIMER */
1531174299Sobrien
153238494Sobrien#ifndef HAVE_EXTERN_STRCASECMP
153338494Sobrien/*
153438494Sobrien * define this extern even if function does not exist, for it will
153538494Sobrien * be filled in by libamu/strcasecmp.c
153638494Sobrien */
153738494Sobrienextern int strcasecmp(const char *s1, const char *s2);
153838494Sobrien#endif /* not HAVE_EXTERN_STRCASECMP */
153938494Sobrien
1540174299Sobrien#ifndef HAVE_EXTERN_STRLCAT
1541174299Sobrien/*
1542174299Sobrien * define this extern even if function does not exist, for it will
1543174299Sobrien * be filled in by libamu/strlcat.c
1544174299Sobrien */
1545174299Sobrienextern size_t strlcat(char *dst, const char *src, size_t siz);
1546174299Sobrien#endif /* not HAVE_EXTERN_STRLCAT */
1547174299Sobrien
1548174299Sobrien#ifndef HAVE_EXTERN_STRLCPY
1549174299Sobrien/*
1550174299Sobrien * define this extern even if function does not exist, for it will
1551174299Sobrien * be filled in by libamu/strlcpy.c
1552174299Sobrien */
1553174299Sobrienextern size_t strlcpy(char *dst, const char *src, size_t siz);
1554174299Sobrien#endif /* not HAVE_EXTERN_STRLCPY */
1555174299Sobrien
155638494Sobrien#if defined(HAVE_STRSTR) && !defined(HAVE_EXTERN_STRSTR)
155738494Sobrienextern char *strstr(const char *s1, const char *s2);
155838494Sobrien#endif /* defined(HAVE_STRSTR) && !defined(HAVE_EXTERN_STRSTR) */
155938494Sobrien
156038494Sobrien#if defined(HAVE_USLEEP) && !defined(HAVE_EXTERN_USLEEP)
156138494Sobrienextern int usleep(u_int useconds);
156238494Sobrien#endif /* defined(HAVE_USLEEP) && !defined(HAVE_EXTERN_USLEEP) */
156338494Sobrien
156438494Sobrien#ifndef HAVE_EXTERN_UALARM
156538494Sobrienextern u_int ualarm(u_int usecs, u_int interval);
156638494Sobrien#endif /* not HAVE_EXTERN_UALARM */
156738494Sobrien
156838494Sobrien#if defined(HAVE_WAIT3) && !defined(HAVE_EXTERN_WAIT3)
156938494Sobrienextern int wait3(int *statusp, int options, struct rusage *rusage);
157038494Sobrien#endif /* defined(HAVE_WAIT3) && !defined(HAVE_EXTERN_WAIT3) */
157138494Sobrien
157252897Sobrien#if defined(HAVE_VSNPRINTF) && !defined(HAVE_EXTERN_VSNPRINTF)
157352897Sobrienextern int vsnprintf(char *, int, const char *, ...);
157452897Sobrien#endif /* defined(HAVE_VSNPRINTF) && !defined(HAVE_EXTERN_VSNPRINTF) */
157552897Sobrien
1576119682Smbr#ifndef HAVE_EXTERN_XDR_CALLMSG
1577119682Smbrextern bool_t xdr_callmsg(XDR *xdrs, struct rpc_msg *msg);
1578119682Smbr#endif /* not HAVE_EXTERN_XDR_CALLMSG */
1579119682Smbr
158038494Sobrien#ifndef HAVE_EXTERN_XDR_OPAQUE_AUTH
158142633Sobrienextern bool_t xdr_opaque_auth(XDR *xdrs, struct opaque_auth *auth);
158238494Sobrien#endif /* not HAVE_EXTERN_XDR_OPAQUE_AUTH */
158338494Sobrien
158438494Sobrien/****************************************************************************/
158538494Sobrien/*
158638494Sobrien * amd-specific header files.
158738494Sobrien */
158838494Sobrien#ifdef THIS_HEADER_FILE_IS_INCLUDED_ABOVE
158938494Sobrien# include <amu_nfs_prot.h>
159038494Sobrien#endif /* THIS_HEADER_FILE_IS_INCLUDED_ABOVE */
1591174299Sobrien#include <am_compat.h>
1592174299Sobrien#include <am_xdr_func.h>
159338494Sobrien#include <am_utils.h>
159438494Sobrien#include <amq_defs.h>
159538494Sobrien#include <aux_conf.h>
159638494Sobrien
159738494Sobrien
159838494Sobrien/****************************************************************************/
159938494Sobrien/*
160042633Sobrien * External definitions that depend on other macros available (or not)
160138494Sobrien * and those are probably declared in any of the above headers.
160238494Sobrien */
160338494Sobrien
1604174299Sobrien#ifdef HAVE_HASMNTOPT
1605174299Sobrien# ifdef HAVE_BAD_HASMNTOPT
1606174299Sobrienextern char *amu_hasmntopt(mntent_t *mnt, char *opt);
1607174299Sobrien# else /* not HAVE_BAD_HASMNTOPT */
1608174299Sobrien#  define amu_hasmntopt hasmntopt
1609174299Sobrien# endif /* not HAVE_BAD_HASMNTOPT */
1610174299Sobrien#else /* not HAVE_HASMNTOPT */
1611174299Sobrienextern char *amu_hasmntopt(mntent_t *mnt, char *opt);
161238494Sobrien#endif /* not HAVE_HASMNTOPT */
161338494Sobrien
161438494Sobrien#endif /* not _AM_DEFS_H */
1615