main shrub/netmisc / compat / netcompat.h
  1/*
  2 * the shit we do to make it build. all code under it's original license
  3 */
  4
  5#ifndef NETCOMPAT_H
  6#define NETCOMPAT_H
  7
  8#ifndef _DEFAULT_SOURCE
  9#define _DEFAULT_SOURCE 1
 10#endif
 11
 12#ifndef _GNU_SOURCE
 13#define _GNU_SOURCE 1
 14#endif
 15
 16#ifndef _XOPEN_SOURCE
 17#define _XOPEN_SOURCE 700
 18#endif
 19
 20#include <signal.h>
 21#include <stddef.h>
 22#include <inttypes.h>
 23#include <stdint.h>
 24#include <stdarg.h>
 25#include <limits.h>
 26#include <time.h>
 27#include <sys/time.h>
 28#include <sys/types.h>
 29#include <grp.h>
 30#include <pwd.h>
 31#include <byteswap.h>
 32#include <sys/stat.h>
 33#include <sys/sysmacros.h>
 34
 35#ifndef __RCSID
 36#define __RCSID(x)
 37#endif
 38
 39#ifndef __COPYRIGHT
 40#define __COPYRIGHT(x)
 41#endif
 42
 43#ifndef __printflike
 44#if defined(__GNUC__) || defined(__clang__)
 45#define __printflike(fmtarg, firstvararg) \
 46	__attribute__((__format__(__printf__, fmtarg, firstvararg)))
 47#else
 48#define __printflike(fmtarg, firstvararg)
 49#endif
 50#endif
 51
 52#ifndef __dead
 53#if defined(__GNUC__) || defined(__clang__)
 54#define __dead __attribute__((__noreturn__))
 55#else
 56#define __dead
 57#endif
 58#endif
 59
 60#ifndef __predict_false
 61#define __predict_false(exp) (exp)
 62#endif
 63
 64#ifndef __predict_true
 65#define __predict_true(exp) (exp)
 66#endif
 67
 68#ifndef _DIAGASSERT
 69#define _DIAGASSERT(exp) ((void)0)
 70#endif
 71
 72#ifndef __weak_alias
 73#define __weak_alias(sym, alias)
 74#endif
 75
 76#ifndef NETCOMPAT_UNUSED
 77#if defined(__GNUC__) || defined(__clang__)
 78#define NETCOMPAT_UNUSED __attribute__((__unused__))
 79#else
 80#define NETCOMPAT_UNUSED
 81#endif
 82#endif
 83
 84#ifndef __UNCONST
 85#define __UNCONST(a) ((void *)(uintptr_t)(const void *)(a))
 86#endif
 87
 88#ifndef __CAST
 89#define __CAST(dt, st) ((dt)(st))
 90#endif
 91
 92#ifndef __arraycount
 93#define __arraycount(__x) (sizeof(__x) / sizeof((__x)[0]))
 94#endif
 95
 96#ifndef __USE
 97#define __USE(a) ((void)(a))
 98#endif
 99
100#ifndef sig_t
101typedef void (*sig_t)(int);
102#endif
103
104#ifndef u_int
105typedef unsigned int u_int;
106#endif
107
108#ifndef u_long
109typedef unsigned long u_long;
110#endif
111
112#if !defined(__linux__) && !defined(__APPLE__) && !defined(__FreeBSD__) && \
113    !defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(__DragonFly__)
114typedef int64_t daddr_t;
115#endif
116
117#ifndef UID_MAX
118#define UID_MAX UINT_MAX
119#endif
120
121#ifndef GID_MAX
122#define GID_MAX UINT_MAX
123#endif
124
125#ifndef ALLPERMS
126#define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)
127#endif
128
129#ifndef timespeccmp
130#define timespeccmp(a, b, cmp) \
131	(((a)->tv_sec == (b)->tv_sec) ? \
132	 ((a)->tv_nsec cmp (b)->tv_nsec) : \
133	 ((a)->tv_sec cmp (b)->tv_sec))
134#endif
135
136#ifndef timespecclear
137#define timespecclear(tsp) \
138	do { \
139		(tsp)->tv_sec = 0; \
140		(tsp)->tv_nsec = 0; \
141	} while (0)
142#endif
143
144#ifndef timersub
145#define timersub(tvp, uvp, vvp) \
146	do { \
147		(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \
148		(vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \
149		if ((vvp)->tv_usec < 0) { \
150			(vvp)->tv_sec--; \
151			(vvp)->tv_usec += 1000000; \
152		} \
153	} while (0)
154#endif
155
156#ifndef bswap32
157#define bswap32 bswap_32
158#endif
159
160#ifndef bswap16
161#define bswap16 bswap_16
162#endif
163
164#ifndef bswap64
165#define bswap64 bswap_64
166#endif
167
168#ifndef UF_APPEND
169#define UF_APPEND 0
170#define UF_IMMUTABLE 0
171#define UF_NODUMP 0
172#define UF_OPAQUE 0
173#define SF_APPEND 0
174#define SF_ARCHIVED 0
175#define SF_IMMUTABLE 0
176#endif
177
178extern const char *netcompat_progname;
179
180const char *getprogname(void);
181void setprogname(const char *);
182size_t strlcpy(char * __restrict, const char * __restrict, size_t);
183int reallocarr(void *, size_t, size_t);
184intmax_t strtoi(const char * __restrict, char ** __restrict, int,
185    intmax_t, intmax_t, int *);
186size_t shquote(const char *, char *, size_t);
187void vwarnc(int, const char *, va_list);
188void warnc(int, const char *, ...);
189__dead void verrc(int, int, const char *, va_list);
190__dead void errc(int, int, const char *, ...);
191int raise_default_signal(int);
192int setgroupent(int);
193int setpassent(int);
194
195#endif