xref: /minix/external/bsd/tmux/dist/compat.h (revision e3b78ef1)
1 /* $Id: compat.h,v 1.1.1.2 2011/08/17 18:40:05 jmmv Exp $ */
2 
3 /*
4  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
5  *
6  * Permission to use, copy, modify, and distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
15  * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
16  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 #ifndef COMPAT_H
20 #define COMPAT_H
21 
22 #ifndef __GNUC__
23 #define __attribute__(a)
24 #endif
25 
26 #ifndef __dead
27 #define __dead __attribute__ ((__noreturn__))
28 #endif
29 #ifndef __packed
30 #define __packed __attribute__ ((__packed__))
31 #endif
32 
33 #ifndef HAVE_BSD_TYPES
34 typedef uint8_t u_int8_t;
35 typedef uint16_t u_int16_t;
36 typedef uint32_t u_int32_t;
37 typedef uint64_t u_int64_t;
38 #endif
39 
40 #ifndef HAVE_PATHS_H
41 #define	_PATH_BSHELL	"/bin/sh"
42 #define	_PATH_TMP	"/tmp/"
43 #define _PATH_DEVNULL	"/dev/null"
44 #define _PATH_TTY	"/dev/tty"
45 #define _PATH_DEV	"/dev/"
46 #endif
47 
48 #ifdef HAVE_QUEUE_H
49 #include <sys/queue.h>
50 #else
51 #include "compat/queue.h"
52 #endif
53 
54 #ifdef HAVE_TREE_H
55 #include <sys/tree.h>
56 #else
57 #include "compat/tree.h"
58 #endif
59 
60 #ifdef HAVE_BITSTRING_H
61 #include <bitstring.h>
62 #else
63 #include "compat/bitstring.h"
64 #endif
65 
66 #ifdef HAVE_PATHS_H
67 #include <paths.h>
68 #endif
69 
70 #ifdef HAVE_FORKPTY
71 #ifdef HAVE_LIBUTIL_H
72 #include <libutil.h>
73 #endif
74 #ifdef HAVE_PTY_H
75 #include <pty.h>
76 #endif
77 #ifdef HAVE_UTIL_H
78 #include <util.h>
79 #endif
80 #endif
81 
82 #ifdef HAVE_VIS
83 #include <vis.h>
84 #else
85 #include "compat/vis.h"
86 #endif
87 
88 #ifdef HAVE_IMSG
89 #include <imsg.h>
90 #else
91 #include "compat/imsg.h"
92 #endif
93 
94 #ifdef HAVE_STDINT_H
95 #include <stdint.h>
96 #else
97 #include <inttypes.h>
98 #endif
99 
100 #ifdef BROKEN_CMSG_FIRSTHDR
101 #undef CMSG_FIRSTHDR
102 #define CMSG_FIRSTHDR(mhdr) \
103 	((mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \
104 	    (struct cmsghdr *)(mhdr)->msg_control :	    \
105 	    (struct cmsghdr *)NULL)
106 #endif
107 
108 #ifndef CMSG_ALIGN
109 #ifdef _CMSG_DATA_ALIGN
110 #define CMSG_ALIGN _CMSG_DATA_ALIGN
111 #else
112 #define CMSG_ALIGN(len) (((len) + sizeof(long) - 1) & ~(sizeof(long) - 1))
113 #endif
114 #endif
115 
116 #ifndef CMSG_SPACE
117 #define CMSG_SPACE(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(len))
118 #endif
119 
120 #ifndef CMSG_LEN
121 #define CMSG_LEN(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (len))
122 #endif
123 
124 #ifndef INFTIM
125 #define INFTIM -1
126 #endif
127 
128 #ifndef WAIT_ANY
129 #define WAIT_ANY -1
130 #endif
131 
132 #ifndef SUN_LEN
133 #define SUN_LEN(sun) (sizeof (sun)->sun_path)
134 #endif
135 
136 #ifndef timercmp
137 #define	timercmp(tvp, uvp, cmp)						\
138 	(((tvp)->tv_sec == (uvp)->tv_sec) ?				\
139 	    ((tvp)->tv_usec cmp (uvp)->tv_usec) :			\
140 	    ((tvp)->tv_sec cmp (uvp)->tv_sec))
141 #endif
142 
143 #ifndef timeradd
144 #define	timeradd(tvp, uvp, vvp)						\
145 	do {								\
146 		(vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec;		\
147 		(vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec;	\
148 		if ((vvp)->tv_usec >= 1000000) {			\
149 			(vvp)->tv_sec++;				\
150 			(vvp)->tv_usec -= 1000000;			\
151 		}							\
152 	} while (0)
153 #endif
154 
155 #ifndef TTY_NAME_MAX
156 #define TTY_NAME_MAX 32
157 #endif
158 
159 #ifndef HAVE_BZERO
160 #undef bzero
161 #define bzero(buf, len) memset(buf, 0, len);
162 #endif
163 
164 #ifndef HAVE_CLOSEFROM
165 /* closefrom.c */
166 void	closefrom(int);
167 #endif
168 
169 #ifndef HAVE_STRCASESTR
170 /* strcasestr.c */
171 char		*strcasestr(const char *, const char *);
172 #endif
173 
174 #ifndef HAVE_STRSEP
175 /* strsep.c */
176 char		*strsep(char **, const char *);
177 #endif
178 
179 #ifndef HAVE_STRTONUM
180 /* strtonum.c */
181 long long	 strtonum(const char *, long long, long long, const char **);
182 #endif
183 
184 #ifndef HAVE_STRLCPY
185 /* strlcpy.c */
186 size_t	 	 strlcpy(char *, const char *, size_t);
187 #endif
188 
189 #ifndef HAVE_STRLCAT
190 /* strlcat.c */
191 size_t	 	 strlcat(char *, const char *, size_t);
192 #endif
193 
194 #ifndef HAVE_DAEMON
195 /* daemon.c */
196 int	 	 daemon(int, int);
197 #endif
198 
199 #ifndef HAVE_FORKPTY
200 /* forkpty.c */
201 #include <sys/ioctl.h>
202 pid_t		 forkpty(int *, char *, struct termios *, struct winsize *);
203 #endif
204 
205 #ifndef HAVE_ASPRINTF
206 /* asprintf.c */
207 int		 asprintf(char **, const char *, ...);
208 int		 vasprintf(char **, const char *, va_list);
209 #endif
210 
211 #ifndef HAVE_FGETLN
212 /* fgetln.c */
213 char		*fgetln(FILE *, size_t *);
214 #endif
215 
216 #ifndef HAVE_SETENV
217 /* setenv.c */
218 int		 setenv(const char *, const char *, int);
219 int		 unsetenv(const char *);
220 #endif
221 
222 #ifdef HAVE_GETOPT
223 #include <getopt.h>
224 #else
225 /* getopt.c */
226 extern int	BSDopterr;
227 extern int	BSDoptind;
228 extern int	BSDoptopt;
229 extern int	BSDoptreset;
230 extern char    *BSDoptarg;
231 int	BSDgetopt(int, char *const *, const char *);
232 #define getopt(ac, av, o)  BSDgetopt(ac, av, o)
233 #define opterr             BSDopterr
234 #define optind             BSDoptind
235 #define optopt             BSDoptopt
236 #define optreset           BSDoptreset
237 #define optarg             BSDoptarg
238 #endif
239 
240 #endif /* COMPAT_H */
241