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