Annotation of embedaddon/tmux/compat.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
                      3:  *
                      4:  * Permission to use, copy, modify, and distribute this software for any
                      5:  * purpose with or without fee is hereby granted, provided that the above
                      6:  * copyright notice and this permission notice appear in all copies.
                      7:  *
                      8:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
                      9:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
                     10:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
                     11:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
                     12:  * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
                     13:  * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
                     14:  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
                     15:  */
                     16: 
                     17: #ifndef COMPAT_H
                     18: #define COMPAT_H
                     19: 
                     20: #include <sys/types.h>
                     21: #include <sys/uio.h>
                     22: 
                     23: #include <limits.h>
                     24: #include <stdio.h>
                     25: #include <termios.h>
                     26: #include <wchar.h>
                     27: 
                     28: #ifndef __GNUC__
                     29: #define __attribute__(a)
                     30: #endif
                     31: 
                     32: #ifndef __unused
                     33: #define __unused __attribute__ ((__unused__))
                     34: #endif
                     35: #ifndef __dead
                     36: #define __dead __attribute__ ((__noreturn__))
                     37: #endif
                     38: #ifndef __packed
                     39: #define __packed __attribute__ ((__packed__))
                     40: #endif
                     41: 
                     42: #ifndef ECHOPRT
                     43: #define ECHOPRT 0
                     44: #endif
                     45: 
                     46: #ifndef ACCESSPERMS
                     47: #define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO)
                     48: #endif
                     49: 
                     50: #if !defined(FIONREAD) && defined(__sun)
                     51: #include <sys/filio.h>
                     52: #endif
                     53: 
                     54: #ifdef HAVE_ERR_H
                     55: #include <err.h>
                     56: #else
                     57: void   err(int, const char *, ...);
                     58: void   errx(int, const char *, ...);
                     59: void   warn(const char *, ...);
                     60: void   warnx(const char *, ...);
                     61: #endif
                     62: 
                     63: #ifndef HAVE_PATHS_H
                     64: #define        _PATH_BSHELL    "/bin/sh"
                     65: #define        _PATH_TMP       "/tmp/"
                     66: #define _PATH_DEVNULL  "/dev/null"
                     67: #define _PATH_TTY      "/dev/tty"
                     68: #define _PATH_DEV      "/dev/"
                     69: #endif
                     70: 
                     71: #ifndef __OpenBSD__
                     72: #define pledge(s, p) (0)
                     73: #endif
                     74: 
                     75: #ifdef HAVE_STDINT_H
                     76: #include <stdint.h>
                     77: #else
                     78: #include <inttypes.h>
                     79: #endif
                     80: 
                     81: #ifdef HAVE_QUEUE_H
                     82: #include <sys/queue.h>
                     83: #else
                     84: #include "compat/queue.h"
                     85: #endif
                     86: 
                     87: #ifdef HAVE_TREE_H
                     88: #include <sys/tree.h>
                     89: #else
                     90: #include "compat/tree.h"
                     91: #endif
                     92: 
                     93: #ifdef HAVE_BITSTRING_H
                     94: #include <bitstring.h>
                     95: #else
                     96: #include "compat/bitstring.h"
                     97: #endif
                     98: 
                     99: #ifdef HAVE_PATHS_H
                    100: #include <paths.h>
                    101: #endif
                    102: 
                    103: #ifdef HAVE_FORKPTY
                    104: #ifdef HAVE_LIBUTIL_H
                    105: #include <libutil.h>
                    106: #endif
                    107: #ifdef HAVE_PTY_H
                    108: #include <pty.h>
                    109: #endif
                    110: #ifdef HAVE_UTIL_H
                    111: #include <util.h>
                    112: #endif
                    113: #endif
                    114: 
                    115: #ifdef HAVE_VIS
                    116: #include <vis.h>
                    117: #else
                    118: #include "compat/vis.h"
                    119: #endif
                    120: 
                    121: #ifdef HAVE_IMSG
                    122: #include <imsg.h>
                    123: #else
                    124: #include "compat/imsg.h"
                    125: #endif
                    126: 
                    127: #ifdef BROKEN_CMSG_FIRSTHDR
                    128: #undef CMSG_FIRSTHDR
                    129: #define CMSG_FIRSTHDR(mhdr) \
                    130:        ((mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \
                    131:            (struct cmsghdr *)(mhdr)->msg_control :         \
                    132:            (struct cmsghdr *)NULL)
                    133: #endif
                    134: 
                    135: #ifndef CMSG_ALIGN
                    136: #ifdef _CMSG_DATA_ALIGN
                    137: #define CMSG_ALIGN _CMSG_DATA_ALIGN
                    138: #else
                    139: #define CMSG_ALIGN(len) (((len) + sizeof(long) - 1) & ~(sizeof(long) - 1))
                    140: #endif
                    141: #endif
                    142: 
                    143: #ifndef CMSG_SPACE
                    144: #define CMSG_SPACE(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(len))
                    145: #endif
                    146: 
                    147: #ifndef CMSG_LEN
                    148: #define CMSG_LEN(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (len))
                    149: #endif
                    150: 
                    151: #ifndef O_DIRECTORY
                    152: #define O_DIRECTORY 0
                    153: #endif
                    154: 
                    155: #ifndef INFTIM
                    156: #define INFTIM -1
                    157: #endif
                    158: 
                    159: #ifndef WAIT_ANY
                    160: #define WAIT_ANY -1
                    161: #endif
                    162: 
                    163: #ifndef SUN_LEN
                    164: #define SUN_LEN(sun) (sizeof (sun)->sun_path)
                    165: #endif
                    166: 
                    167: #ifndef timercmp
                    168: #define        timercmp(tvp, uvp, cmp)                                         \
                    169:        (((tvp)->tv_sec == (uvp)->tv_sec) ?                             \
                    170:            ((tvp)->tv_usec cmp (uvp)->tv_usec) :                       \
                    171:            ((tvp)->tv_sec cmp (uvp)->tv_sec))
                    172: #endif
                    173: 
                    174: #ifndef timeradd
                    175: #define        timeradd(tvp, uvp, vvp)                                         \
                    176:        do {                                                            \
                    177:                (vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec;          \
                    178:                (vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec;       \
                    179:                if ((vvp)->tv_usec >= 1000000) {                        \
                    180:                        (vvp)->tv_sec++;                                \
                    181:                        (vvp)->tv_usec -= 1000000;                      \
                    182:                }                                                       \
                    183:        } while (0)
                    184: #endif
                    185: 
                    186: #ifndef timersub
                    187: #define timersub(tvp, uvp, vvp)                                         \
                    188:        do {                                                            \
                    189:                (vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec;          \
                    190:                (vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec;       \
                    191:                if ((vvp)->tv_usec < 0) {                               \
                    192:                        (vvp)->tv_sec--;                                \
                    193:                        (vvp)->tv_usec += 1000000;                      \
                    194:                }                                                       \
                    195:        } while (0)
                    196: #endif
                    197: 
                    198: #ifndef TTY_NAME_MAX
                    199: #define TTY_NAME_MAX 32
                    200: #endif
                    201: 
                    202: #ifndef HOST_NAME_MAX
                    203: #define HOST_NAME_MAX 255
                    204: #endif
                    205: 
                    206: #ifndef HAVE_FLOCK
                    207: #define LOCK_SH 0
                    208: #define LOCK_EX 0
                    209: #define LOCK_NB 0
                    210: #define flock(fd, op) (0)
                    211: #endif
                    212: 
                    213: #ifndef HAVE_EXPLICIT_BZERO
                    214: /* explicit_bzero.c */
                    215: void            explicit_bzero(void *, size_t);
                    216: #endif
                    217: 
                    218: #ifndef HAVE_GETDTABLECOUNT
                    219: /* getdtablecount.c */
                    220: int             getdtablecount(void);
                    221: #endif
                    222: 
                    223: #ifndef HAVE_CLOSEFROM
                    224: /* closefrom.c */
                    225: void            closefrom(int);
                    226: #endif
                    227: 
                    228: #ifndef HAVE_STRCASESTR
                    229: /* strcasestr.c */
                    230: char           *strcasestr(const char *, const char *);
                    231: #endif
                    232: 
                    233: #ifndef HAVE_STRSEP
                    234: /* strsep.c */
                    235: char           *strsep(char **, const char *);
                    236: #endif
                    237: 
                    238: #ifndef HAVE_STRTONUM
                    239: /* strtonum.c */
                    240: long long       strtonum(const char *, long long, long long, const char **);
                    241: #endif
                    242: 
                    243: #ifndef HAVE_STRLCPY
                    244: /* strlcpy.c */
                    245: size_t          strlcpy(char *, const char *, size_t);
                    246: #endif
                    247: 
                    248: #ifndef HAVE_STRLCAT
                    249: /* strlcat.c */
                    250: size_t          strlcat(char *, const char *, size_t);
                    251: #endif
                    252: 
                    253: #ifndef HAVE_STRNLEN
                    254: /* strnlen.c */
                    255: size_t          strnlen(const char *, size_t);
                    256: #endif
                    257: 
                    258: #ifndef HAVE_STRNDUP
                    259: /* strndup.c */
                    260: char           *strndup(const char *, size_t);
                    261: #endif
                    262: 
                    263: #ifndef HAVE_DAEMON
                    264: /* daemon.c */
                    265: int             daemon(int, int);
                    266: #endif
                    267: 
                    268: #ifndef HAVE_GETPROGNAME
                    269: /* getprogname.c */
                    270: const char     *getprogname(void);
                    271: #endif
                    272: 
                    273: #ifndef HAVE_SETPROCTITLE
                    274: /* setproctitle.c */
                    275: void            setproctitle(const char *, ...);
                    276: #endif
                    277: 
                    278: #ifndef HAVE_B64_NTOP
                    279: /* base64.c */
                    280: #undef b64_ntop
                    281: #undef b64_pton
                    282: int             b64_ntop(const char *, size_t, char *, size_t);
                    283: int             b64_pton(const char *, u_char *, size_t);
                    284: #endif
                    285: 
                    286: #ifndef HAVE_FORKPTY
                    287: /* forkpty.c */
                    288: #include <sys/ioctl.h>
                    289: pid_t           forkpty(int *, char *, struct termios *, struct winsize *);
                    290: #endif
                    291: 
                    292: #ifndef HAVE_ASPRINTF
                    293: /* asprintf.c */
                    294: int             asprintf(char **, const char *, ...);
                    295: int             vasprintf(char **, const char *, va_list);
                    296: #endif
                    297: 
                    298: #ifndef HAVE_FGETLN
                    299: /* fgetln.c */
                    300: char           *fgetln(FILE *, size_t *);
                    301: #endif
                    302: 
                    303: #ifndef HAVE_FPARSELN
                    304: char           *fparseln(FILE *, size_t *, size_t *, const char *, int);
                    305: #endif
                    306: 
                    307: #ifndef HAVE_SETENV
                    308: /* setenv.c */
                    309: int             setenv(const char *, const char *, int);
                    310: int             unsetenv(const char *);
                    311: #endif
                    312: 
                    313: #ifndef HAVE_CFMAKERAW
                    314: /* cfmakeraw.c */
                    315: void            cfmakeraw(struct termios *);
                    316: #endif
                    317: 
                    318: #ifndef HAVE_FREEZERO
                    319: /* freezero.c */
                    320: void            freezero(void *, size_t);
                    321: #endif
                    322: 
                    323: #ifndef HAVE_REALLOCARRAY
                    324: /* reallocarray.c */
                    325: void           *reallocarray(void *, size_t, size_t);
                    326: #endif
                    327: 
                    328: #ifndef HAVE_RECALLOCARRAY
                    329: /* recallocarray.c */
                    330: void           *recallocarray(void *, size_t, size_t, size_t);
                    331: #endif
                    332: 
                    333: #ifdef HAVE_UTF8PROC
                    334: /* utf8proc.c */
                    335: int             utf8proc_wcwidth(wchar_t);
                    336: int             utf8proc_mbtowc(wchar_t *, const char *, size_t);
                    337: int             utf8proc_wctomb(char *, wchar_t);
                    338: #endif
                    339: 
                    340: #ifdef HAVE_GETOPT
                    341: #include <getopt.h>
                    342: #else
                    343: /* getopt.c */
                    344: extern int     BSDopterr;
                    345: extern int     BSDoptind;
                    346: extern int     BSDoptopt;
                    347: extern int     BSDoptreset;
                    348: extern char    *BSDoptarg;
                    349: int    BSDgetopt(int, char *const *, const char *);
                    350: #define getopt(ac, av, o)  BSDgetopt(ac, av, o)
                    351: #define opterr             BSDopterr
                    352: #define optind             BSDoptind
                    353: #define optopt             BSDoptopt
                    354: #define optreset           BSDoptreset
                    355: #define optarg             BSDoptarg
                    356: #endif
                    357: 
                    358: #endif /* COMPAT_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>