1/*
2 *
3 * Portions Copyright 1998 Sun Microsystems, Inc.  All rights reserved.
4 * Use is subject to license terms.
5 *
6 */
7
8#pragma ident	"%Z%%M%	%I%	%E% SMI"
9
10/*
11 * Copyright (c) 1994 Regents of the University of Michigan.
12 * All rights reserved.
13 *
14 * Redistribution and use in source and binary forms are permitted
15 * provided that this notice is preserved and that due credit is given
16 * to the University of Michigan at Ann Arbor. The name of the University
17 * may not be used to endorse or promote products derived from this
18 * software without specific prior written permission. This software
19 * is provided ``as is'' without express or implied warranty.
20 */
21
22#ifndef _PORTABLE_H
23#define _PORTABLE_H
24
25/*
26 * portable.h for LDAP -- this is where we define common stuff to make
27 * life easier on various Unix systems.
28 *
29 * Unless you are porting LDAP to a new platform, you should not need to
30 * edit this file.
31 */
32
33
34#ifndef SYSV
35#if defined( hpux ) || defined( sunos5 ) || defined ( sgi ) || defined( SVR4 )
36#define SYSV
37#endif
38#endif
39
40
41/*
42 * under System V, use sysconf() instead of getdtablesize
43 */
44#if !defined( USE_SYSCONF ) && defined( SYSV )
45#define USE_SYSCONF
46#endif
47
48
49/*
50 * under System V, daemons should use setsid() instead of detaching from their
51 * tty themselves
52 */
53#if !defined( USE_SETSID ) && defined( SYSV )
54#define USE_SETSID
55#endif
56
57
58/*
59 * System V has socket options in filio.h
60 */
61#if !defined( NEED_FILIO ) && defined( SYSV ) && !defined( hpux )
62#define NEED_FILIO
63#endif
64
65/*
66 * use lockf() under System V
67 */
68#if !defined( USE_LOCKF ) && ( defined( SYSV ) || defined( aix ))
69#define USE_LOCKF
70#endif
71
72/*
73 * on many systems, we should use waitpid() instead of waitN()
74 */
75#if !defined( USE_WAITPID ) && ( defined( SYSV ) || defined( sunos4 ) || defined( ultrix ) || defined( aix ))
76#define USE_WAITPID
77#endif
78
79
80/*
81 * define the wait status argument type
82 */
83#if ( defined( SunOS ) && SunOS < 40 ) || defined( nextstep )
84#define WAITSTATUSTYPE	union wait
85#else
86#define WAITSTATUSTYPE	int
87#endif
88
89/*
90 * define the flags for wait
91 */
92#ifdef sunos5
93#define WAIT_FLAGS	( WNOHANG | WUNTRACED | WCONTINUED )
94#else
95#define WAIT_FLAGS	( WNOHANG | WUNTRACED )
96#endif
97
98
99/*
100 * defined the options for openlog (syslog)
101 */
102#ifdef ultrix
103#define OPENLOG_OPTIONS		LOG_PID
104#else
105#define OPENLOG_OPTIONS		( LOG_PID | LOG_NOWAIT )
106#endif
107
108
109/*
110 * some systems don't have the BSD re_comp and re_exec routines
111 */
112#ifndef NEED_BSDREGEX
113#if defined( SYSV ) || defined( VMS ) || defined( netbsd ) || defined( freebsd ) || defined( linux )
114#define NEED_BSDREGEX
115#endif
116#endif
117
118/*
119 * many systems do not have the setpwfile() library routine... we just
120 * enable use for those systems we know have it.
121 */
122#ifndef HAVE_SETPWFILE
123#if defined( sunos4 ) || defined( ultrix ) || defined( __osf__ )
124#define HAVE_SETPWFILE
125#endif
126#endif
127
128/*
129 * Are sys_errlist and sys_nerr declared in stdio.h?
130 */
131#ifndef SYSERRLIST_IN_STDIO
132#if defined( freebsd )
133#define SYSERRLIST_IN_STDIO
134#endif
135#endif
136
137/*
138 * for select()
139 */
140#if !defined(FD_SET) && !defined(WINSOCK)
141#define NFDBITS         32
142#define FD_SETSIZE      32
143#define FD_SET(n, p)    ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS)))
144#define FD_CLR(n, p)    ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
145#define FD_ISSET(n, p)  ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
146#define FD_ZERO(p)      bzero((char *)(p), sizeof(*(p)))
147#endif /* FD_SET */
148
149#if defined( hpux ) && defined( __STDC__ )
150/*
151 * Under HP/UX, select seems to want (int *) instead of fd_set.  Non-ANSI
152 * compilers don't like recursive macros, so ignore the problem if __STDC__
153 * is not defined.
154 */
155#define select(a,b,c,d,e) select(a, (int *)b, (int *)c, (int *)d, e)
156#endif /* hpux && __STDC__ */
157
158
159/*
160 * for signal() -- what do signal handling functions return?
161 */
162#ifndef SIG_FN
163#ifdef sunos5
164#   define SIG_FN void          /* signal-catching functions return void */
165#else /* sunos5 */
166# ifdef BSD
167#  if (BSD >= 199006) || defined(NeXT) || defined(__osf__) || defined(sun) || defined(ultrix) || defined(apollo) || defined(POSIX_SIGNALS)
168#   define SIG_FN void          /* signal-catching functions return void */
169#  else
170#   define SIG_FN int           /* signal-catching functions return int */
171#  endif
172# else /* BSD */
173#  define SIG_FN void           /* signal-catching functions return void */
174# endif /* BSD */
175#endif /* sunos5 */
176#endif /* SIG_FN */
177
178/*
179 * call signal or sigset (signal does not block the signal while
180 * in the handler on sys v and sigset does not exist on bsd)
181 */
182#ifdef SYSV
183#define SIGNAL sigset
184#else
185#define SIGNAL signal
186#endif
187
188/*
189 * toupper and tolower macros are different under bsd and sys v
190 */
191#if defined( SYSV ) && !defined( hpux )
192#define TOUPPER(c)	(isascii(c) && islower(c) ? _toupper(c) : c)
193#define TOLOWER(c)	(isascii(c) && isupper(c) ? _tolower(c) : c)
194#else
195#define TOUPPER(c)	(isascii(c) && islower(c) ? toupper(c) : c)
196#define TOLOWER(c)	(isascii(c) && isupper(c) ? tolower(c) : c)
197#endif
198
199/*
200 * put a cover on the tty-related ioctl calls we need to use
201 */
202#if defined( NeXT ) || (defined(SunOS) && SunOS < 40)
203#define TERMIO_TYPE struct sgttyb
204#define TERMFLAG_TYPE int
205#define GETATTR( fd, tiop )	ioctl((fd), TIOCGETP, (caddr_t)(tiop))
206#define SETATTR( fd, tiop )	ioctl((fd), TIOCSETP, (caddr_t)(tiop))
207#define GETFLAGS( tio )		(tio).sg_flags
208#define SETFLAGS( tio, flags )	(tio).sg_flags = (flags)
209#else
210#define USE_TERMIOS
211#define TERMIO_TYPE struct termios
212#define TERMFLAG_TYPE tcflag_t
213#define GETATTR( fd, tiop )	tcgetattr((fd), (tiop))
214#define SETATTR( fd, tiop )	tcsetattr((fd), TCSANOW /* 0 */, (tiop))
215#define GETFLAGS( tio )		(tio).c_lflag
216#define SETFLAGS( tio, flags )	(tio).c_lflag = (flags)
217#endif
218
219
220#if defined( ultrix ) || defined( nextstep )
221extern char *strdup();
222#endif /* ultrix || nextstep */
223
224#endif /* _PORTABLE_H */
225