2009-06-25 16:47:00 +00:00
|
|
|
/*
|
2016-01-19 18:07:25 +00:00
|
|
|
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
|
2009-06-25 16:47:00 +00:00
|
|
|
*
|
|
|
|
* Permission to use, copy, modify, and distribute this software for any
|
|
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
|
|
* copyright notice and this permission notice appear in all copies.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
|
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
|
|
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
|
|
|
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
|
|
|
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
*/
|
|
|
|
|
2010-10-27 21:34:59 +00:00
|
|
|
#ifndef COMPAT_H
|
|
|
|
#define COMPAT_H
|
|
|
|
|
2017-01-25 13:49:01 +00:00
|
|
|
#include <sys/types.h>
|
2017-04-20 18:09:07 +00:00
|
|
|
#include <sys/ioctl.h>
|
2017-01-25 13:49:01 +00:00
|
|
|
#include <sys/uio.h>
|
|
|
|
|
2019-12-16 21:34:36 +00:00
|
|
|
#include <fnmatch.h>
|
2017-01-25 13:49:01 +00:00
|
|
|
#include <limits.h>
|
|
|
|
#include <stdio.h>
|
2017-03-09 15:39:13 +00:00
|
|
|
#include <termios.h>
|
2017-01-31 12:51:53 +00:00
|
|
|
#include <wchar.h>
|
2017-01-25 13:49:01 +00:00
|
|
|
|
2020-05-22 16:20:35 +00:00
|
|
|
#ifdef HAVE_UTF8PROC
|
|
|
|
#include <utf8proc.h>
|
|
|
|
#endif
|
|
|
|
|
2010-10-27 21:33:15 +00:00
|
|
|
#ifndef __GNUC__
|
|
|
|
#define __attribute__(a)
|
|
|
|
#endif
|
|
|
|
|
2015-11-18 14:37:08 +00:00
|
|
|
#ifndef __unused
|
|
|
|
#define __unused __attribute__ ((__unused__))
|
|
|
|
#endif
|
2010-10-27 21:33:15 +00:00
|
|
|
#ifndef __dead
|
|
|
|
#define __dead __attribute__ ((__noreturn__))
|
|
|
|
#endif
|
|
|
|
#ifndef __packed
|
|
|
|
#define __packed __attribute__ ((__packed__))
|
|
|
|
#endif
|
|
|
|
|
2013-07-12 21:21:42 +00:00
|
|
|
#ifndef ECHOPRT
|
|
|
|
#define ECHOPRT 0
|
|
|
|
#endif
|
|
|
|
|
2016-09-08 14:32:15 +00:00
|
|
|
#ifndef ACCESSPERMS
|
|
|
|
#define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if !defined(FIONREAD) && defined(__sun)
|
|
|
|
#include <sys/filio.h>
|
|
|
|
#endif
|
|
|
|
|
2017-03-09 15:39:13 +00:00
|
|
|
#ifdef HAVE_ERR_H
|
|
|
|
#include <err.h>
|
|
|
|
#else
|
|
|
|
void err(int, const char *, ...);
|
|
|
|
void errx(int, const char *, ...);
|
|
|
|
void warn(const char *, ...);
|
|
|
|
void warnx(const char *, ...);
|
|
|
|
#endif
|
|
|
|
|
2019-12-03 18:53:23 +00:00
|
|
|
#ifdef HAVE_PATHS_H
|
|
|
|
#include <paths.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef _PATH_BSHELL
|
|
|
|
#define _PATH_BSHELL "/bin/sh"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef _PATH_TMP
|
|
|
|
#define _PATH_TMP "/tmp/"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef _PATH_DEVNULL
|
2009-06-25 16:47:00 +00:00
|
|
|
#define _PATH_DEVNULL "/dev/null"
|
2019-12-03 18:53:23 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef _PATH_TTY
|
2009-06-25 16:47:00 +00:00
|
|
|
#define _PATH_TTY "/dev/tty"
|
2019-12-03 18:53:23 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef _PATH_DEV
|
2009-07-21 13:07:50 +00:00
|
|
|
#define _PATH_DEV "/dev/"
|
2019-12-03 18:53:23 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef _PATH_DEFPATH
|
2019-04-09 20:31:50 +00:00
|
|
|
#define _PATH_DEFPATH "/usr/bin:/bin"
|
2009-06-25 16:47:00 +00:00
|
|
|
#endif
|
|
|
|
|
2020-05-01 08:11:56 +00:00
|
|
|
#ifndef _PATH_VI
|
|
|
|
#define _PATH_VI "/usr/bin/vi"
|
|
|
|
#endif
|
|
|
|
|
2017-01-23 12:27:58 +00:00
|
|
|
#ifndef __OpenBSD__
|
|
|
|
#define pledge(s, p) (0)
|
|
|
|
#endif
|
|
|
|
|
2017-01-25 13:49:01 +00:00
|
|
|
#ifdef HAVE_STDINT_H
|
|
|
|
#include <stdint.h>
|
|
|
|
#else
|
|
|
|
#include <inttypes.h>
|
|
|
|
#endif
|
|
|
|
|
2009-06-25 16:47:00 +00:00
|
|
|
#ifdef HAVE_QUEUE_H
|
2009-06-25 17:02:59 +00:00
|
|
|
#include <sys/queue.h>
|
2009-06-25 16:47:00 +00:00
|
|
|
#else
|
|
|
|
#include "compat/queue.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef HAVE_TREE_H
|
2009-06-25 17:02:59 +00:00
|
|
|
#include <sys/tree.h>
|
2009-06-25 16:47:00 +00:00
|
|
|
#else
|
|
|
|
#include "compat/tree.h"
|
|
|
|
#endif
|
2010-05-19 21:49:57 +00:00
|
|
|
|
2009-06-25 17:02:59 +00:00
|
|
|
#ifdef HAVE_BITSTRING_H
|
|
|
|
#include <bitstring.h>
|
|
|
|
#else
|
|
|
|
#include "compat/bitstring.h"
|
|
|
|
#endif
|
|
|
|
|
2009-06-25 16:47:00 +00:00
|
|
|
#ifdef HAVE_LIBUTIL_H
|
|
|
|
#include <libutil.h>
|
|
|
|
#endif
|
2017-10-11 07:03:31 +00:00
|
|
|
|
2009-06-25 16:47:00 +00:00
|
|
|
#ifdef HAVE_PTY_H
|
|
|
|
#include <pty.h>
|
|
|
|
#endif
|
2017-10-11 07:03:31 +00:00
|
|
|
|
2009-06-25 16:47:00 +00:00
|
|
|
#ifdef HAVE_UTIL_H
|
|
|
|
#include <util.h>
|
|
|
|
#endif
|
|
|
|
|
2009-06-25 20:27:32 +00:00
|
|
|
#ifdef HAVE_VIS
|
|
|
|
#include <vis.h>
|
|
|
|
#else
|
|
|
|
#include "compat/vis.h"
|
|
|
|
#endif
|
|
|
|
|
2010-10-27 21:33:15 +00:00
|
|
|
#ifdef HAVE_IMSG
|
2010-06-06 13:00:47 +00:00
|
|
|
#include <imsg.h>
|
2010-10-27 21:33:15 +00:00
|
|
|
#else
|
|
|
|
#include "compat/imsg.h"
|
2009-08-14 21:13:48 +00:00
|
|
|
#endif
|
|
|
|
|
2010-12-31 22:12:33 +00:00
|
|
|
#ifdef BROKEN_CMSG_FIRSTHDR
|
2009-09-02 12:30:56 +00:00
|
|
|
#undef CMSG_FIRSTHDR
|
|
|
|
#define CMSG_FIRSTHDR(mhdr) \
|
2010-05-19 21:40:49 +00:00
|
|
|
((mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \
|
|
|
|
(struct cmsghdr *)(mhdr)->msg_control : \
|
2009-09-02 12:30:56 +00:00
|
|
|
(struct cmsghdr *)NULL)
|
|
|
|
#endif
|
|
|
|
|
2010-05-19 21:40:49 +00:00
|
|
|
#ifndef CMSG_ALIGN
|
2010-12-31 22:12:33 +00:00
|
|
|
#ifdef _CMSG_DATA_ALIGN
|
2010-05-19 21:40:49 +00:00
|
|
|
#define CMSG_ALIGN _CMSG_DATA_ALIGN
|
|
|
|
#else
|
|
|
|
#define CMSG_ALIGN(len) (((len) + sizeof(long) - 1) & ~(sizeof(long) - 1))
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef CMSG_SPACE
|
|
|
|
#define CMSG_SPACE(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(len))
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef CMSG_LEN
|
|
|
|
#define CMSG_LEN(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (len))
|
|
|
|
#endif
|
|
|
|
|
2014-01-06 15:12:05 +00:00
|
|
|
#ifndef O_DIRECTORY
|
|
|
|
#define O_DIRECTORY 0
|
|
|
|
#endif
|
|
|
|
|
2019-12-16 21:34:36 +00:00
|
|
|
#ifndef FNM_CASEFOLD
|
2020-01-25 16:41:49 +00:00
|
|
|
#ifdef FNM_IGNORECASE
|
|
|
|
#define FNM_CASEFOLD FNM_IGNORECASE
|
|
|
|
#else
|
2019-12-16 21:34:36 +00:00
|
|
|
#define FNM_CASEFOLD 0
|
|
|
|
#endif
|
2020-01-25 16:41:49 +00:00
|
|
|
#endif
|
2019-12-16 21:34:36 +00:00
|
|
|
|
2009-07-01 22:46:13 +00:00
|
|
|
#ifndef INFTIM
|
|
|
|
#define INFTIM -1
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef WAIT_ANY
|
|
|
|
#define WAIT_ANY -1
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef SUN_LEN
|
|
|
|
#define SUN_LEN(sun) (sizeof (sun)->sun_path)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef timercmp
|
|
|
|
#define timercmp(tvp, uvp, cmp) \
|
|
|
|
(((tvp)->tv_sec == (uvp)->tv_sec) ? \
|
|
|
|
((tvp)->tv_usec cmp (uvp)->tv_usec) : \
|
|
|
|
((tvp)->tv_sec cmp (uvp)->tv_sec))
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef timeradd
|
|
|
|
#define timeradd(tvp, uvp, vvp) \
|
|
|
|
do { \
|
|
|
|
(vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \
|
|
|
|
(vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec; \
|
|
|
|
if ((vvp)->tv_usec >= 1000000) { \
|
|
|
|
(vvp)->tv_sec++; \
|
|
|
|
(vvp)->tv_usec -= 1000000; \
|
|
|
|
} \
|
|
|
|
} while (0)
|
|
|
|
#endif
|
|
|
|
|
2013-03-28 00:00:13 +00:00
|
|
|
#ifndef timersub
|
|
|
|
#define timersub(tvp, uvp, vvp) \
|
|
|
|
do { \
|
|
|
|
(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \
|
|
|
|
(vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \
|
|
|
|
if ((vvp)->tv_usec < 0) { \
|
|
|
|
(vvp)->tv_sec--; \
|
|
|
|
(vvp)->tv_usec += 1000000; \
|
|
|
|
} \
|
|
|
|
} while (0)
|
|
|
|
#endif
|
|
|
|
|
2009-07-01 22:46:13 +00:00
|
|
|
#ifndef TTY_NAME_MAX
|
|
|
|
#define TTY_NAME_MAX 32
|
|
|
|
#endif
|
|
|
|
|
2014-10-21 10:00:16 +00:00
|
|
|
#ifndef HOST_NAME_MAX
|
|
|
|
#define HOST_NAME_MAX 255
|
|
|
|
#endif
|
|
|
|
|
2014-09-23 09:44:45 +00:00
|
|
|
#ifndef HAVE_FLOCK
|
|
|
|
#define LOCK_SH 0
|
|
|
|
#define LOCK_EX 0
|
|
|
|
#define LOCK_NB 0
|
|
|
|
#define flock(fd, op) (0)
|
|
|
|
#endif
|
|
|
|
|
2017-03-24 10:05:53 +00:00
|
|
|
#ifndef HAVE_EXPLICIT_BZERO
|
|
|
|
/* explicit_bzero.c */
|
|
|
|
void explicit_bzero(void *, size_t);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef HAVE_GETDTABLECOUNT
|
|
|
|
/* getdtablecount.c */
|
|
|
|
int getdtablecount(void);
|
|
|
|
#endif
|
|
|
|
|
2010-10-27 20:21:01 +00:00
|
|
|
#ifndef HAVE_CLOSEFROM
|
|
|
|
/* closefrom.c */
|
2016-05-05 14:18:58 +00:00
|
|
|
void closefrom(int);
|
2010-10-27 20:21:01 +00:00
|
|
|
#endif
|
|
|
|
|
2009-07-02 07:31:02 +00:00
|
|
|
#ifndef HAVE_STRCASESTR
|
|
|
|
/* strcasestr.c */
|
|
|
|
char *strcasestr(const char *, const char *);
|
|
|
|
#endif
|
|
|
|
|
2009-08-16 16:15:53 +00:00
|
|
|
#ifndef HAVE_STRSEP
|
|
|
|
/* strsep.c */
|
|
|
|
char *strsep(char **, const char *);
|
|
|
|
#endif
|
|
|
|
|
2009-06-25 16:47:00 +00:00
|
|
|
#ifndef HAVE_STRTONUM
|
|
|
|
/* strtonum.c */
|
|
|
|
long long strtonum(const char *, long long, long long, const char **);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef HAVE_STRLCPY
|
|
|
|
/* strlcpy.c */
|
|
|
|
size_t strlcpy(char *, const char *, size_t);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef HAVE_STRLCAT
|
|
|
|
/* strlcat.c */
|
|
|
|
size_t strlcat(char *, const char *, size_t);
|
|
|
|
#endif
|
|
|
|
|
2017-03-09 15:43:08 +00:00
|
|
|
#ifndef HAVE_STRNLEN
|
|
|
|
/* strnlen.c */
|
|
|
|
size_t strnlen(const char *, size_t);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef HAVE_STRNDUP
|
|
|
|
/* strndup.c */
|
|
|
|
char *strndup(const char *, size_t);
|
|
|
|
#endif
|
|
|
|
|
2017-06-09 07:52:45 +00:00
|
|
|
#ifndef HAVE_MEMMEM
|
|
|
|
/* memmem.c */
|
|
|
|
void *memmem(const void *, size_t, const void *, size_t);
|
|
|
|
#endif
|
|
|
|
|
2009-06-25 16:47:00 +00:00
|
|
|
#ifndef HAVE_DAEMON
|
|
|
|
/* daemon.c */
|
|
|
|
int daemon(int, int);
|
|
|
|
#endif
|
|
|
|
|
2016-05-27 17:04:25 +00:00
|
|
|
#ifndef HAVE_GETPROGNAME
|
|
|
|
/* getprogname.c */
|
|
|
|
const char *getprogname(void);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef HAVE_SETPROCTITLE
|
|
|
|
/* setproctitle.c */
|
|
|
|
void setproctitle(const char *, ...);
|
|
|
|
#endif
|
|
|
|
|
2011-07-22 15:10:24 +00:00
|
|
|
#ifndef HAVE_B64_NTOP
|
2017-01-22 19:12:15 +00:00
|
|
|
/* base64.c */
|
|
|
|
#undef b64_ntop
|
|
|
|
#undef b64_pton
|
2011-07-22 10:49:33 +00:00
|
|
|
int b64_ntop(const char *, size_t, char *, size_t);
|
2017-01-22 19:12:15 +00:00
|
|
|
int b64_pton(const char *, u_char *, size_t);
|
2011-07-22 10:49:33 +00:00
|
|
|
#endif
|
|
|
|
|
2017-04-20 18:09:07 +00:00
|
|
|
#ifndef HAVE_FDFORKPTY
|
|
|
|
/* fdforkpty.c */
|
|
|
|
int getptmfd(void);
|
|
|
|
pid_t fdforkpty(int, int *, char *, struct termios *,
|
|
|
|
struct winsize *);
|
|
|
|
#endif
|
|
|
|
|
2009-06-25 16:47:00 +00:00
|
|
|
#ifndef HAVE_FORKPTY
|
|
|
|
/* forkpty.c */
|
|
|
|
pid_t forkpty(int *, char *, struct termios *, struct winsize *);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef HAVE_ASPRINTF
|
|
|
|
/* asprintf.c */
|
2010-05-19 21:31:39 +00:00
|
|
|
int asprintf(char **, const char *, ...);
|
|
|
|
int vasprintf(char **, const char *, va_list);
|
2009-06-25 16:47:00 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef HAVE_FGETLN
|
|
|
|
/* fgetln.c */
|
2010-05-19 21:31:39 +00:00
|
|
|
char *fgetln(FILE *, size_t *);
|
|
|
|
#endif
|
|
|
|
|
2020-06-18 20:01:55 +00:00
|
|
|
#ifndef HAVE_GETLINE
|
|
|
|
/* getline.c */
|
|
|
|
ssize_t getline(char **, size_t *, FILE *);
|
|
|
|
#endif
|
|
|
|
|
2010-05-19 21:31:39 +00:00
|
|
|
#ifndef HAVE_SETENV
|
|
|
|
/* setenv.c */
|
2010-06-05 16:29:40 +00:00
|
|
|
int setenv(const char *, const char *, int);
|
|
|
|
int unsetenv(const char *);
|
2009-06-25 16:47:00 +00:00
|
|
|
#endif
|
|
|
|
|
2013-04-22 08:44:15 +00:00
|
|
|
#ifndef HAVE_CFMAKERAW
|
|
|
|
/* cfmakeraw.c */
|
2015-11-18 14:09:17 +00:00
|
|
|
void cfmakeraw(struct termios *);
|
2013-10-10 09:27:23 +00:00
|
|
|
#endif
|
|
|
|
|
2017-04-19 06:58:45 +00:00
|
|
|
#ifndef HAVE_FREEZERO
|
|
|
|
/* freezero.c */
|
|
|
|
void freezero(void *, size_t);
|
|
|
|
#endif
|
|
|
|
|
2015-11-18 14:09:17 +00:00
|
|
|
#ifndef HAVE_REALLOCARRAY
|
|
|
|
/* reallocarray.c */
|
2016-09-01 19:40:03 +00:00
|
|
|
void *reallocarray(void *, size_t, size_t);
|
|
|
|
#endif
|
|
|
|
|
2017-03-24 10:05:53 +00:00
|
|
|
#ifndef HAVE_RECALLOCARRAY
|
|
|
|
/* recallocarray.c */
|
|
|
|
void *recallocarray(void *, size_t, size_t, size_t);
|
|
|
|
#endif
|
|
|
|
|
2016-09-01 19:40:03 +00:00
|
|
|
#ifdef HAVE_UTF8PROC
|
|
|
|
/* utf8proc.c */
|
|
|
|
int utf8proc_wcwidth(wchar_t);
|
|
|
|
int utf8proc_mbtowc(wchar_t *, const char *, size_t);
|
|
|
|
int utf8proc_wctomb(char *, wchar_t);
|
2013-04-22 08:44:15 +00:00
|
|
|
#endif
|
|
|
|
|
2009-06-25 16:47:00 +00:00
|
|
|
/* getopt.c */
|
|
|
|
extern int BSDopterr;
|
|
|
|
extern int BSDoptind;
|
|
|
|
extern int BSDoptopt;
|
|
|
|
extern int BSDoptreset;
|
|
|
|
extern char *BSDoptarg;
|
|
|
|
int BSDgetopt(int, char *const *, const char *);
|
|
|
|
#define getopt(ac, av, o) BSDgetopt(ac, av, o)
|
|
|
|
#define opterr BSDopterr
|
|
|
|
#define optind BSDoptind
|
|
|
|
#define optopt BSDoptopt
|
|
|
|
#define optreset BSDoptreset
|
|
|
|
#define optarg BSDoptarg
|
2010-10-27 21:34:59 +00:00
|
|
|
|
|
|
|
#endif /* COMPAT_H */
|