1 /*-
2  * Copyright (c) 1991, 1993
3  *  The Regents of the University of California.  All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. ***REMOVED*** - see
14  *    ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
15  * 4. Neither the name of the University nor the names of its contributors
16  *    may be used to endorse or promote products derived from this software
17  *    without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29  * SUCH DAMAGE.
30  *
31  *  @(#)compat.h  8.13 (Berkeley) 2/21/94
32  */
33 
34 #ifndef _COMPAT_H_
35 #define _COMPAT_H_
36 
37 #include <sys/types.h>
38 
39 /*
40  * If your system doesn't typedef u_long, u_short, or u_char, change
41  * the 0 to a 1.
42  */
43 #if 0
44 typedef unsigned char u_char;   /* 4.[34]BSD names. */
45 typedef unsigned int  u_int;
46 typedef unsigned long u_long;
47 typedef unsigned short  u_short;
48 #endif
49 
50 /* If your system doesn't typedef size_t, change the 0 to a 1. */
51 #if 0
52 typedef unsigned int  size_t;   /* POSIX, 4.[34]BSD names. */
53 #endif
54 
55 /* If your system doesn't typedef ssize_t, change the 0 to a 1. */
56 #if 0
57 typedef int   ssize_t;  /* POSIX names. */
58 #endif
59 
60 /*
61  * If your system doesn't have the POSIX type for a signal mask,
62  * change the 0 to a 1.
63  */
64 #if 0 /* POSIX 1003.1 signal mask type. */
65 typedef unsigned int  sigset_t;
66 #endif
67 
68 /*
69  * If your system's vsprintf returns a char *, not an int,
70  * change the 0 to a 1.
71  */
72 #if defined(__sun) && !defined(__SVR4) /* SUNOS */
73 #define VSPRINTF_CHARSTAR
74 #endif
75 /*
76  * If you don't have POSIX 1003.1 signals, the signal code surrounding the
77  * temporary file creation is intended to block all of the possible signals
78  * long enough to create the file and unlink it.  All of this stuff is
79  * intended to use old-style BSD calls to fake POSIX 1003.1 calls.
80  */
81 #ifdef NO_POSIX_SIGNALS
82 #define sigemptyset(set) (*(set) = 0)
83 #define sigfillset(set) (*(set) = ~(sigset_t)0, 0)
84 #define sigaddset(set, signo) (*(set) |= sigmask(signo), 0)
85 #define sigdelset(set, signo) (*(set) &= ~sigmask(signo), 0)
86 #define sigismember(set, signo) ((*(set)&sigmask(signo)) != 0)
87 
88 #define SIG_BLOCK 1
89 #define SIG_UNBLOCK 2
90 #define SIG_SETMASK 3
91 
92 static int dbm_sigtemp; /* For the use of sigprocmask */
93 
94 /* Repeated test of oset != NULL is to avoid "*0". */
95 #define sigprocmask(how, set, oset)                                                                                                                            \
96     ((dbm_sigtemp =                                                                                                                                            \
97           (((how) == SIG_BLOCK) ? sigblock(0) | *(set) : (((how) == SIG_UNBLOCK) ? sigblock(0) & ~(*(set)) : ((how) == SIG_SETMASK ? *(set) : sigblock(0))))), \
98      ((oset) ? (*(oset ? oset : set) = sigsetmask(dbm_sigtemp)) : sigsetmask(dbm_sigtemp)), 0)
99 #endif
100 
101 /*
102  * If your system doesn't have an include file with the appropriate
103  * byte order set, make sure you specify the correct one.
104  */
105 #ifndef BYTE_ORDER
106 #define LITTLE_ENDIAN 1234    /* LSB first: i386, vax */
107 #define BIG_ENDIAN 4321       /* MSB first: 68000, ibm, net */
108 #define BYTE_ORDER BIG_ENDIAN /* Set for your system. */
109 #endif
110 
111 #if defined(SYSV) || defined(SYSTEM5) || defined(__sun)
112 #define index(a, b) strchr(a, b)
113 #define rindex(a, b) strrchr(a, b)
114 #define bzero(a, b) memset(a, 0, b)
115 #define bcmp(a, b, n) memcmp(a, b, n)
116 #define bcopy(a, b, n) memmove(b, a, n)
117 #endif
118 
119 #if defined(BSD) || defined(BSD4_3)
120 #define strchr(a, b) index(a, b)
121 #define strrchr(a, b) rindex(a, b)
122 #define memcmp(a, b, n) bcmp(a, b, n)
123 #define memmove(a, b, n) bcopy(b, a, n)
124 #endif
125 
126 /*
127  * 32-bit machine.  The db routines are theoretically independent of
128  * the size of u_shorts and u_longs, but I don't know that anyone has
129  * ever actually tried it.  At a minimum, change the following #define's
130  * if you are trying to compile on a different type of system.
131  */
132 #ifndef USHRT_MAX
133 #define USHRT_MAX 0xFFFF
134 #define ULONG_MAX 0xFFFFFFFF
135 #endif
136 
137 #ifndef O_ACCMODE /* POSIX 1003.1 access mode mask. */
138 #define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR)
139 #endif
140 
141 #ifndef _POSIX2_RE_DUP_MAX /* POSIX 1003.2 RE limit. */
142 #define _POSIX2_RE_DUP_MAX 255
143 #endif
144 
145 /*
146  * If you can't provide lock values in the open(2) call.  Note, this
147  * allows races to happen.
148  */
149 #ifndef O_EXLOCK /* 4.4BSD extension. */
150 #define O_EXLOCK 0
151 #endif
152 
153 #ifndef O_SHLOCK /* 4.4BSD extension. */
154 #define O_SHLOCK 0
155 #endif
156 
157 #ifndef EFTYPE
158 #define EFTYPE EINVAL /* POSIX 1003.1 format errno. */
159 #endif
160 
161 #ifndef WCOREDUMP /* 4.4BSD extension */
162 #define WCOREDUMP(a) 0
163 #endif
164 
165 #ifndef STDERR_FILENO
166 #define STDIN_FILENO 0 /* ANSI C #defines */
167 #define STDOUT_FILENO 1
168 #define STDERR_FILENO 2
169 #endif
170 
171 #ifndef SEEK_END
172 #define SEEK_SET 0 /* POSIX 1003.1 seek values */
173 #define SEEK_CUR 1
174 #define SEEK_END 2
175 #endif
176 
177 #ifndef _POSIX_VDISABLE   /* POSIX 1003.1 disabling char. */
178 #define _POSIX_VDISABLE 0 /* Some systems used 0. */
179 #endif
180 
181 #ifndef TCSASOFT /* 4.4BSD extension. */
182 #define TCSASOFT 0
183 #endif
184 
185 #ifndef _POSIX2_RE_DUP_MAX /* POSIX 1003.2 values. */
186 #define _POSIX2_RE_DUP_MAX 255
187 #endif
188 
189 #ifndef NULL /* ANSI C #defines NULL everywhere. */
190 #define NULL 0
191 #endif
192 
193 #ifndef MAX /* Usually found in <sys/param.h>. */
194 #define MAX(_a, _b) ((_a) < (_b) ? (_b) : (_a))
195 #endif
196 #ifndef MIN /* Usually found in <sys/param.h>. */
197 #define MIN(_a, _b) ((_a) < (_b) ? (_a) : (_b))
198 #endif
199 
200 /* Default file permissions. */
201 #ifndef DEFFILEMODE /* 4.4BSD extension. */
202 #define DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
203 #endif
204 
205 #ifndef __sun
206 #ifndef S_ISDIR                                /* POSIX 1003.1 file type tests. */
207 #define S_ISDIR(m) ((m & 0170000) == 0040000)  /* directory */
208 #define S_ISCHR(m) ((m & 0170000) == 0020000)  /* char special */
209 #define S_ISBLK(m) ((m & 0170000) == 0060000)  /* block special */
210 #define S_ISREG(m) ((m & 0170000) == 0100000)  /* regular file */
211 #define S_ISFIFO(m) ((m & 0170000) == 0010000) /* fifo */
212 #endif
213 #ifndef S_ISLNK                                /* BSD POSIX 1003.1 extensions */
214 #define S_ISLNK(m) ((m & 0170000) == 0120000)  /* symbolic link */
215 #define S_ISSOCK(m) ((m & 0170000) == 0140000) /* socket */
216 #endif
217 #endif /* __sun */
218 
219 /* The type of a va_list. */
220 #ifndef _BSD_VA_LIST_ /* 4.4BSD #define. */
221 #define _BSD_VA_LIST_ char*
222 #endif
223 
224 #endif /* !_COMPAT_H_ */
225