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