]> jfr.im git - solanum.git/blame - librb/include/rb_lib.h
librb: acinclude: check for ipv6 on win32
[solanum.git] / librb / include / rb_lib.h
CommitLineData
db137867
AC
1#ifndef RB_LIB_H
2#define RB_LIB_H 1
3
4#include <librb-config.h>
5#include <stdio.h>
6#include <limits.h>
7#include <stdarg.h>
8#include <assert.h>
9#include <fcntl.h>
10#include <signal.h>
11#include <ctype.h>
12
77cb59b3
AC
13#ifdef HAVE_LINUX_TCP_H
14# include <linux/tcp.h>
15#endif
16
db137867
AC
17#ifdef __GNUC__
18#undef alloca
19#define alloca __builtin_alloca
20#else
21# ifdef _MSC_VER
22# include <malloc.h>
23# define alloca _alloca
24# else
25# if RB_HAVE_ALLOCA_H
26# include <alloca.h>
27# else
28# ifdef _AIX
29#pragma alloca
30# else
31# ifndef alloca /* predefined by HP cc +Olibcalls */
32char *alloca();
33# endif
34# endif
35# endif
36# endif
37#endif /* __GNUC__ */
38
39#ifdef __GNUC__
40
c2ac22cc
VY
41#ifdef rb_likely
42#undef rb_likely
db137867 43#endif
c2ac22cc
VY
44#ifdef rb_unlikely
45#undef rb_unlikely
db137867
AC
46#endif
47
48#if __GNUC__ == 2 && __GNUC_MINOR__ < 96
49# define __builtin_expect(x, expected_value) (x)
50#endif
51
c2ac22cc
VY
52#define rb_likely(x) __builtin_expect(!!(x), 1)
53#define rb_unlikely(x) __builtin_expect(!!(x), 0)
db137867
AC
54
55#else /* !__GNUC__ */
56
57#define UNUSED(x) x
58
c2ac22cc
VY
59#ifdef rb_likely
60#undef rb_likely
db137867 61#endif
c2ac22cc
VY
62#ifdef rb_unlikely
63#undef rb_unlikely
db137867 64#endif
c2ac22cc
VY
65#define rb_likely(x) (x)
66#define rb_unlikely(x) (x)
db137867
AC
67#endif
68
17e4e6af
AC
69#ifdef _WIN32
70#define rb_get_errno() do { errno = WSAGetLastError(); WSASetLastError(errno); } while(0)
71typedef SOCKET rb_platform_fd_t;
72#else
73#define rb_get_errno()
74typedef int rb_platform_fd_t;
75#endif
db137867 76
3202e249 77#ifdef _WIN32
db137867
AC
78#include <process.h>
79
d74fa5b5
JT
80#ifndef PATH_MAX
81#define PATH_MAX 128
db137867
AC
82#endif
83
db137867
AC
84#ifdef strerror
85#undef strerror
86#endif
87
3202e249
VY
88#define strerror(x) rb_strerror(x)
89char *rb_strerror(int error);
db137867 90
38b68802 91#undef ENOBUFS
db137867 92#define ENOBUFS WSAENOBUFS
b68dee9b 93
38b68802 94#undef EINPROGRESS
db137867 95#define EINPROGRESS WSAEINPROGRESS
b68dee9b 96
38b68802 97#undef EWOULDBLOCK
db137867 98#define EWOULDBLOCK WSAEWOULDBLOCK
b68dee9b 99
38b68802 100#undef EMSGSIZE
db137867 101#define EMSGSIZE WSAEMSGSIZE
b68dee9b 102
38b68802 103#undef EALREADY
db137867 104#define EALREADY WSAEALREADY
b68dee9b 105
38b68802 106#undef EISCONN
db137867 107#define EISCONN WSAEISCONN
b68dee9b 108
38b68802 109#undef EADDRINUSE
db137867 110#define EADDRINUSE WSAEADDRINUSE
b68dee9b 111
38b68802 112#undef EAFNOSUPPORT
db137867
AC
113#define EAFNOSUPPORT WSAEAFNOSUPPORT
114
115#define pipe(x) _pipe(x, 1024, O_BINARY)
116#define ioctl(x,y,z) ioctlsocket(x,y, (u_long *)z)
117
db137867 118#define WNOHANG 1
db137867
AC
119
120#ifndef SIGKILL
121#define SIGKILL SIGTERM
122#endif
123
3202e249 124#endif /* _WIN32 */
db137867
AC
125
126
127
128#ifndef HOSTIPLEN
129#define HOSTIPLEN 53
130#endif
131
db137867 132#ifdef __GNUC__
3202e249 133#define slrb_assert(expr) do \
c2ac22cc
VY
134 if(rb_unlikely(!(expr))) { \
135 rb_lib_log( \
db137867
AC
136 "file: %s line: %d (%s): Assertion failed: (%s)", \
137 __FILE__, __LINE__, __PRETTY_FUNCTION__, #expr); \
db137867
AC
138 } \
139 while(0)
140#else
3202e249 141#define slrb_assert(expr) do \
c2ac22cc 142 if(rb_unlikely(!(expr))) { \
29c92cf9 143 rb_lib_log( \
db137867
AC
144 "file: %s line: %d: Assertion failed: (%s)", \
145 __FILE__, __LINE__, #expr); \
db137867
AC
146 } \
147 while(0)
148#endif
3202e249
VY
149
150#ifdef SOFT_ASSERT
151#define lrb_assert(expr) slrb_assert(expr)
db137867 152#else
3202e249 153#define lrb_assert(expr) do { slrb_assert(expr); assert(expr); } while(0)
db137867
AC
154#endif
155
9d9a4f60 156#ifdef RB_SOCKADDR_HAS_SA_LEN
db137867
AC
157#define ss_len sa_len
158#endif
159
3202e249
VY
160#define GET_SS_FAMILY(x) (((const struct sockaddr *)(x))->sa_family)
161#define SET_SS_FAMILY(x, y) ((((struct sockaddr *)(x))->sa_family) = y)
9d9a4f60 162#ifdef RB_SOCKADDR_HAS_SA_LEN
db137867
AC
163#define SET_SS_LEN(x, y) do { \
164 struct sockaddr *storage; \
165 storage = ((struct sockaddr *)(x));\
166 storage->sa_len = (y); \
167 } while (0)
168#define GET_SS_LEN(x) (((struct sockaddr *)(x))->sa_len)
9d9a4f60 169#else /* !RB_SOCKADDR_HAS_SA_LEN */
db137867
AC
170#define SET_SS_LEN(x, y) (((struct sockaddr *)(x))->sa_family = ((struct sockaddr *)(x))->sa_family)
171#ifdef RB_IPV6
172#define GET_SS_LEN(x) (((struct sockaddr *)(x))->sa_family == AF_INET ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6))
173#else
174#define GET_SS_LEN(x) (((struct sockaddr *)(x))->sa_family == AF_INET ? sizeof(struct sockaddr_in) : 0)
175#endif
176#endif
177
178#ifndef INADDRSZ
179#define INADDRSZ 4
180#endif
181
182#ifndef IN6ADDRSZ
183#define IN6ADDRSZ 16
184#endif
185
186#ifndef INT16SZ
187#define INT16SZ 2
188#endif
189
41aed6bb
SA
190#ifndef UINT16_MAX
191#define UINT16_MAX (65535U)
192#endif
193
db137867
AC
194
195typedef void log_cb(const char *buffer);
196typedef void restart_cb(const char *buffer);
197typedef void die_cb(const char *buffer);
198
199char *rb_ctime(const time_t, char *, size_t);
200char *rb_date(const time_t, char *, size_t);
201void rb_lib_log(const char *, ...);
202void rb_lib_restart(const char *, ...);
203void rb_lib_die(const char *, ...);
204void rb_set_time(void);
205const char *rb_lib_version(void);
206
207void rb_lib_init(log_cb * xilog, restart_cb * irestart, die_cb * idie, int closeall, int maxfds,
208 size_t dh_size, size_t fd_heap_size);
209void rb_lib_loop(long delay);
210
211time_t rb_current_time(void);
212const struct timeval *rb_current_time_tv(void);
213pid_t rb_spawn_process(const char *, const char **);
214
215char *rb_strtok_r(char *, const char *, char **);
216
217int rb_gettimeofday(struct timeval *, void *);
218
219void rb_sleep(unsigned int seconds, unsigned int useconds);
220char *rb_crypt(const char *, const char *);
221
222unsigned char *rb_base64_encode(const unsigned char *str, int length);
223unsigned char *rb_base64_decode(const unsigned char *str, int length, int *ret);
3202e249
VY
224int rb_kill(pid_t, int);
225char *rb_strerror(int);
db137867 226
3202e249 227int rb_setenv(const char *, const char *, int);
db137867 228
3202e249
VY
229pid_t rb_waitpid(pid_t pid, int *status, int options);
230pid_t rb_getpid(void);
231//unsigned int rb_geteuid(void);
db137867 232
030272f3 233
db137867
AC
234#include <rb_tools.h>
235#include <rb_memory.h>
236#include <rb_commio.h>
237#include <rb_balloc.h>
238#include <rb_linebuf.h>
db137867
AC
239#include <rb_event.h>
240#include <rb_helper.h>
241#include <rb_rawbuf.h>
242#include <rb_patricia.h>
243
244#endif