1b528cefcSMark Murray/* -*- C -*- */ 2b528cefcSMark Murray/* 3*ae771770SStanislav Sedov * Copyright (c) 1995-2005 Kungliga Tekniska Högskolan 4b528cefcSMark Murray * (Royal Institute of Technology, Stockholm, Sweden). 5b528cefcSMark Murray * All rights reserved. 6b528cefcSMark Murray * 7b528cefcSMark Murray * Redistribution and use in source and binary forms, with or without 8b528cefcSMark Murray * modification, are permitted provided that the following conditions 9b528cefcSMark Murray * are met: 10b528cefcSMark Murray * 11b528cefcSMark Murray * 1. Redistributions of source code must retain the above copyright 12b528cefcSMark Murray * notice, this list of conditions and the following disclaimer. 13b528cefcSMark Murray * 14b528cefcSMark Murray * 2. Redistributions in binary form must reproduce the above copyright 15b528cefcSMark Murray * notice, this list of conditions and the following disclaimer in the 16b528cefcSMark Murray * documentation and/or other materials provided with the distribution. 17b528cefcSMark Murray * 18b528cefcSMark Murray * 3. Neither the name of the Institute nor the names of its contributors 19b528cefcSMark Murray * may be used to endorse or promote products derived from this software 20b528cefcSMark Murray * without specific prior written permission. 21b528cefcSMark Murray * 22b528cefcSMark Murray * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 23b528cefcSMark Murray * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24b528cefcSMark Murray * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25b528cefcSMark Murray * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 26b528cefcSMark Murray * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27b528cefcSMark Murray * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28b528cefcSMark Murray * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29b528cefcSMark Murray * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30b528cefcSMark Murray * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31b528cefcSMark Murray * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32b528cefcSMark Murray * SUCH DAMAGE. 33b528cefcSMark Murray */ 34b528cefcSMark Murray 35b528cefcSMark Murray#include <stdio.h> 36b528cefcSMark Murray#include <stdlib.h> 37b528cefcSMark Murray#include <stdarg.h> 38c19800e8SDoug Rabson#ifdef HAVE_STDINT_H 39c19800e8SDoug Rabson#include <stdint.h> 40c19800e8SDoug Rabson#endif 41b528cefcSMark Murray#include <string.h> 42b528cefcSMark Murray#include <signal.h> 435e9cd1aeSAssar Westerlund 44*ae771770SStanislav Sedov#ifndef ROKEN_LIB_FUNCTION 45*ae771770SStanislav Sedov#ifdef _WIN32 46*ae771770SStanislav Sedov# define ROKEN_LIB_CALL __cdecl 47*ae771770SStanislav Sedov# ifdef ROKEN_LIB_DYNAMIC 48*ae771770SStanislav Sedov# define ROKEN_LIB_FUNCTION __declspec(dllimport) 49*ae771770SStanislav Sedov# define ROKEN_LIB_VARIABLE __declspec(dllimport) 50*ae771770SStanislav Sedov# else 51*ae771770SStanislav Sedov# define ROKEN_LIB_FUNCTION 52*ae771770SStanislav Sedov# define ROKEN_LIB_VARIABLE 53*ae771770SStanislav Sedov# endif 54*ae771770SStanislav Sedov#else 55*ae771770SStanislav Sedov#define ROKEN_LIB_FUNCTION 56*ae771770SStanislav Sedov#define ROKEN_LIB_CALL 57*ae771770SStanislav Sedov#define ROKEN_LIB_VARIABLE 58*ae771770SStanislav Sedov#endif 59*ae771770SStanislav Sedov#endif 60*ae771770SStanislav Sedov 61*ae771770SStanislav Sedov#ifdef HAVE_WINSOCK 62*ae771770SStanislav Sedov/* Declarations for Microsoft Windows */ 63*ae771770SStanislav Sedov 64*ae771770SStanislav Sedov#include <winsock2.h> 65*ae771770SStanislav Sedov#include <ws2tcpip.h> 66*ae771770SStanislav Sedov 67*ae771770SStanislav Sedov/* 68*ae771770SStanislav Sedov * error codes for inet_ntop/inet_pton 69*ae771770SStanislav Sedov */ 70*ae771770SStanislav Sedov#define EAFNOSUPPORT WSAEAFNOSUPPORT 71*ae771770SStanislav Sedov 72*ae771770SStanislav Sedovtypedef SOCKET rk_socket_t; 73*ae771770SStanislav Sedov 74*ae771770SStanislav Sedov#define rk_closesocket(x) closesocket(x) 75*ae771770SStanislav Sedov#define rk_INVALID_SOCKET INVALID_SOCKET 76*ae771770SStanislav Sedov#define rk_IS_BAD_SOCKET(s) ((s) == INVALID_SOCKET) 77*ae771770SStanislav Sedov#define rk_IS_SOCKET_ERROR(rv) ((rv) == SOCKET_ERROR) 78*ae771770SStanislav Sedov#define rk_SOCK_ERRNO WSAGetLastError() 79*ae771770SStanislav Sedov 80*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL rk_SOCK_IOCTL(SOCKET s, long cmd, int * argp); 81*ae771770SStanislav Sedov 82*ae771770SStanislav Sedov/* Microsoft VC 2010 POSIX definitions */ 83*ae771770SStanislav Sedov#ifndef ENOTSOCK 84*ae771770SStanislav Sedov#define ENOTSOCK 128 85*ae771770SStanislav Sedov#endif 86*ae771770SStanislav Sedov#ifndef ENOTSUP 87*ae771770SStanislav Sedov#define ENOTSUP 129 88*ae771770SStanislav Sedov#endif 89*ae771770SStanislav Sedov#ifndef EOVERFLOW 90*ae771770SStanislav Sedov#define EOVERFLOW 132 91*ae771770SStanislav Sedov#endif 92*ae771770SStanislav Sedov#ifndef ETIMEDOUT 93*ae771770SStanislav Sedov#define ETIMEDOUT 138 94*ae771770SStanislav Sedov#endif 95*ae771770SStanislav Sedov#ifndef EWOULDBLOCK 96*ae771770SStanislav Sedov#define EWOULDBLOCK 140 97*ae771770SStanislav Sedov#endif 98*ae771770SStanislav Sedov 99*ae771770SStanislav Sedov#define rk_SOCK_INIT() rk_WSAStartup() 100*ae771770SStanislav Sedov#define rk_SOCK_EXIT() rk_WSACleanup() 101*ae771770SStanislav Sedov 102*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL rk_WSAStartup(void); 103*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL rk_WSACleanup(void); 104*ae771770SStanislav Sedov 105*ae771770SStanislav Sedov#else /* not WinSock */ 106*ae771770SStanislav Sedov 107*ae771770SStanislav Sedovtypedef int rk_socket_t; 108*ae771770SStanislav Sedov 109*ae771770SStanislav Sedov#define rk_closesocket(x) close(x) 110*ae771770SStanislav Sedov#define rk_SOCK_IOCTL(s,c,a) ioctl((s),(c),(a)) 111*ae771770SStanislav Sedov#define rk_IS_BAD_SOCKET(s) ((s) < 0) 112*ae771770SStanislav Sedov#define rk_IS_SOCKET_ERROR(rv) ((rv) < 0) 113*ae771770SStanislav Sedov#define rk_SOCK_ERRNO errno 114*ae771770SStanislav Sedov#define rk_INVALID_SOCKET (-1) 115*ae771770SStanislav Sedov 116*ae771770SStanislav Sedov#define rk_SOCK_INIT() 0 117*ae771770SStanislav Sedov#define rk_SOCK_EXIT() do { } while(0) 118*ae771770SStanislav Sedov 119*ae771770SStanislav Sedov#endif 120*ae771770SStanislav Sedov 121*ae771770SStanislav Sedov#ifndef IN_LOOPBACKNET 122*ae771770SStanislav Sedov#define IN_LOOPBACKNET 127 123*ae771770SStanislav Sedov#endif 124*ae771770SStanislav Sedov 125*ae771770SStanislav Sedov#ifdef _MSC_VER 126*ae771770SStanislav Sedov/* Declarations for Microsoft Visual C runtime on Windows */ 127*ae771770SStanislav Sedov 128*ae771770SStanislav Sedov#include<process.h> 129*ae771770SStanislav Sedov 130*ae771770SStanislav Sedov#include<io.h> 131*ae771770SStanislav Sedov 132*ae771770SStanislav Sedov#ifndef __BIT_TYPES_DEFINED__ 133*ae771770SStanislav Sedov#define __BIT_TYPES_DEFINED__ 134*ae771770SStanislav Sedov 135*ae771770SStanislav Sedovtypedef __int8 int8_t; 136*ae771770SStanislav Sedovtypedef __int16 int16_t; 137*ae771770SStanislav Sedovtypedef __int32 int32_t; 138*ae771770SStanislav Sedovtypedef __int64 int64_t; 139*ae771770SStanislav Sedovtypedef unsigned __int8 uint8_t; 140*ae771770SStanislav Sedovtypedef unsigned __int16 uint16_t; 141*ae771770SStanislav Sedovtypedef unsigned __int32 uint32_t; 142*ae771770SStanislav Sedovtypedef unsigned __int64 uint64_t; 143*ae771770SStanislav Sedovtypedef uint8_t u_int8_t; 144*ae771770SStanislav Sedovtypedef uint16_t u_int16_t; 145*ae771770SStanislav Sedovtypedef uint32_t u_int32_t; 146*ae771770SStanislav Sedovtypedef uint64_t u_int64_t; 147*ae771770SStanislav Sedov 148*ae771770SStanislav Sedov#endif /* __BIT_TYPES_DEFINED__ */ 149*ae771770SStanislav Sedov 150*ae771770SStanislav Sedov#define UNREACHABLE(x) x 151*ae771770SStanislav Sedov#define UNUSED_ARGUMENT(x) ((void) x) 152*ae771770SStanislav Sedov 153*ae771770SStanislav Sedov#define RETSIGTYPE void 154*ae771770SStanislav Sedov 155*ae771770SStanislav Sedov#define VOID_RETSIGTYPE 1 156*ae771770SStanislav Sedov 157*ae771770SStanislav Sedov#ifdef VOID_RETSIGTYPE 158*ae771770SStanislav Sedov#define SIGRETURN(x) return 159*ae771770SStanislav Sedov#else 160*ae771770SStanislav Sedov#define SIGRETURN(x) return (RETSIGTYPE)(x) 161*ae771770SStanislav Sedov#endif 162*ae771770SStanislav Sedov 163*ae771770SStanislav Sedov#ifndef CPP_ONLY 164*ae771770SStanislav Sedov 165*ae771770SStanislav Sedovtypedef int pid_t; 166*ae771770SStanislav Sedov 167*ae771770SStanislav Sedovtypedef unsigned int gid_t; 168*ae771770SStanislav Sedov 169*ae771770SStanislav Sedovtypedef unsigned int uid_t; 170*ae771770SStanislav Sedov 171*ae771770SStanislav Sedovtypedef unsigned short mode_t; 172*ae771770SStanislav Sedov 173*ae771770SStanislav Sedov#endif 174*ae771770SStanislav Sedov 175*ae771770SStanislav Sedov#ifndef __cplusplus 176*ae771770SStanislav Sedov#define inline __inline 177*ae771770SStanislav Sedov#endif 178*ae771770SStanislav Sedov 179*ae771770SStanislav Sedov#else 180*ae771770SStanislav Sedov 181*ae771770SStanislav Sedov#define UNREACHABLE(x) 182*ae771770SStanislav Sedov#define UNUSED_ARGUMENT(x) 183*ae771770SStanislav Sedov 184*ae771770SStanislav Sedov#endif 185*ae771770SStanislav Sedov 1865e9cd1aeSAssar Westerlund#ifdef _AIX 1875e9cd1aeSAssar Westerlundstruct ether_addr; 1885e9cd1aeSAssar Westerlundstruct sockaddr_dl; 1895e9cd1aeSAssar Westerlund#endif 190b528cefcSMark Murray#ifdef HAVE_SYS_PARAM_H 191b528cefcSMark Murray#include <sys/param.h> 192b528cefcSMark Murray#endif 193adb0ddaeSAssar Westerlund#ifdef HAVE_INTTYPES_H 194adb0ddaeSAssar Westerlund#include <inttypes.h> 195adb0ddaeSAssar Westerlund#endif 196b528cefcSMark Murray#ifdef HAVE_SYS_TYPES_H 197b528cefcSMark Murray#include <sys/types.h> 198b528cefcSMark Murray#endif 199adb0ddaeSAssar Westerlund#ifdef HAVE_SYS_BITYPES_H 200adb0ddaeSAssar Westerlund#include <sys/bitypes.h> 201adb0ddaeSAssar Westerlund#endif 202adb0ddaeSAssar Westerlund#ifdef HAVE_BIND_BITYPES_H 203adb0ddaeSAssar Westerlund#include <bind/bitypes.h> 204adb0ddaeSAssar Westerlund#endif 205adb0ddaeSAssar Westerlund#ifdef HAVE_NETINET_IN6_MACHTYPES_H 206adb0ddaeSAssar Westerlund#include <netinet/in6_machtypes.h> 207adb0ddaeSAssar Westerlund#endif 208b528cefcSMark Murray#ifdef HAVE_UNISTD_H 209b528cefcSMark Murray#include <unistd.h> 210b528cefcSMark Murray#endif 211b528cefcSMark Murray#ifdef HAVE_SYS_SOCKET_H 212b528cefcSMark Murray#include <sys/socket.h> 213b528cefcSMark Murray#endif 214b528cefcSMark Murray#ifdef HAVE_SYS_UIO_H 215b528cefcSMark Murray#include <sys/uio.h> 216b528cefcSMark Murray#endif 217b528cefcSMark Murray#ifdef HAVE_GRP_H 218b528cefcSMark Murray#include <grp.h> 219b528cefcSMark Murray#endif 220b528cefcSMark Murray#ifdef HAVE_SYS_STAT_H 221b528cefcSMark Murray#include <sys/stat.h> 222b528cefcSMark Murray#endif 223b528cefcSMark Murray#ifdef HAVE_NETINET_IN_H 224b528cefcSMark Murray#include <netinet/in.h> 225b528cefcSMark Murray#endif 226b528cefcSMark Murray#ifdef HAVE_NETINET_IN6_H 227b528cefcSMark Murray#include <netinet/in6.h> 228b528cefcSMark Murray#endif 229b528cefcSMark Murray#ifdef HAVE_NETINET6_IN6_H 230b528cefcSMark Murray#include <netinet6/in6.h> 231b528cefcSMark Murray#endif 232b528cefcSMark Murray#ifdef HAVE_ARPA_INET_H 233b528cefcSMark Murray#include <arpa/inet.h> 234b528cefcSMark Murray#endif 235b528cefcSMark Murray#ifdef HAVE_NETDB_H 236b528cefcSMark Murray#include <netdb.h> 237b528cefcSMark Murray#endif 2384137ff4cSJacques Vidrine#ifdef HAVE_ARPA_NAMESER_H 2394137ff4cSJacques Vidrine#include <arpa/nameser.h> 2404137ff4cSJacques Vidrine#endif 2414137ff4cSJacques Vidrine#ifdef HAVE_RESOLV_H 2424137ff4cSJacques Vidrine#include <resolv.h> 2434137ff4cSJacques Vidrine#endif 244b528cefcSMark Murray#ifdef HAVE_SYSLOG_H 245b528cefcSMark Murray#include <syslog.h> 246b528cefcSMark Murray#endif 247b528cefcSMark Murray#ifdef HAVE_FCNTL_H 248b528cefcSMark Murray#include <fcntl.h> 249b528cefcSMark Murray#endif 250b528cefcSMark Murray#ifdef HAVE_ERRNO_H 251b528cefcSMark Murray#include <errno.h> 252b528cefcSMark Murray#endif 253b528cefcSMark Murray#include <err.h> 254b528cefcSMark Murray#ifdef HAVE_TERMIOS_H 255b528cefcSMark Murray#include <termios.h> 256b528cefcSMark Murray#endif 257*ae771770SStanislav Sedov#ifdef HAVE_SYS_IOCTL_H 258b528cefcSMark Murray#include <sys/ioctl.h> 259b528cefcSMark Murray#endif 260b528cefcSMark Murray#ifdef TIME_WITH_SYS_TIME 261b528cefcSMark Murray#include <sys/time.h> 262b528cefcSMark Murray#include <time.h> 263b528cefcSMark Murray#elif defined(HAVE_SYS_TIME_H) 264b528cefcSMark Murray#include <sys/time.h> 265b528cefcSMark Murray#else 266b528cefcSMark Murray#include <time.h> 267b528cefcSMark Murray#endif 268b528cefcSMark Murray 269b528cefcSMark Murray#ifdef HAVE_PATHS_H 270b528cefcSMark Murray#include <paths.h> 271b528cefcSMark Murray#endif 272b528cefcSMark Murray 273*ae771770SStanislav Sedov#ifdef HAVE_DIRENT_H 274*ae771770SStanislav Sedov#include <dirent.h> 275*ae771770SStanislav Sedov#endif 276*ae771770SStanislav Sedov 277*ae771770SStanislav Sedov#ifdef BACKSLASH_PATH_DELIM 278*ae771770SStanislav Sedov#define rk_PATH_DELIM '\\' 279*ae771770SStanislav Sedov#endif 280*ae771770SStanislav Sedov 2818373020dSJacques Vidrine#ifndef HAVE_SSIZE_T 282*ae771770SStanislav Sedov#ifndef SSIZE_T_DEFINED 283*ae771770SStanislav Sedov#ifdef ssize_t 284*ae771770SStanislav Sedov#undef ssize_t 285*ae771770SStanislav Sedov#endif 286*ae771770SStanislav Sedov#ifdef _WIN64 287*ae771770SStanislav Sedovtypedef __int64 ssize_t; 288*ae771770SStanislav Sedov#else 2898373020dSJacques Vidrinetypedef int ssize_t; 2908373020dSJacques Vidrine#endif 291*ae771770SStanislav Sedov#define SSIZE_T_DEFINED 292*ae771770SStanislav Sedov#endif /* SSIZE_T_DEFINED */ 293*ae771770SStanislav Sedov#endif /* HAVE_SSIZE_T */ 2948373020dSJacques Vidrine 295b528cefcSMark Murray#include <roken-common.h> 296b528cefcSMark Murray 2975e9cd1aeSAssar WesterlundROKEN_CPP_START 2985e9cd1aeSAssar Westerlund 299c19800e8SDoug Rabson#ifdef HAVE_UINTPTR_T 300c19800e8SDoug Rabson#define rk_UNCONST(x) ((void *)(uintptr_t)(const void *)(x)) 301c19800e8SDoug Rabson#else 302c19800e8SDoug Rabson#define rk_UNCONST(x) ((void *)(unsigned long)(const void *)(x)) 303c19800e8SDoug Rabson#endif 304c19800e8SDoug Rabson 305b528cefcSMark Murray#if !defined(HAVE_SETSID) && defined(HAVE__SETSID) 306b528cefcSMark Murray#define setsid _setsid 307b528cefcSMark Murray#endif 308b528cefcSMark Murray 309*ae771770SStanislav Sedov#ifdef _MSC_VER 310*ae771770SStanislav Sedov/* Additional macros for Visual C/C++ runtime */ 311*ae771770SStanislav Sedov 312*ae771770SStanislav Sedov#define close _close 313*ae771770SStanislav Sedov 314*ae771770SStanislav Sedov#define getpid _getpid 315*ae771770SStanislav Sedov 316*ae771770SStanislav Sedov#define open _open 317*ae771770SStanislav Sedov 318*ae771770SStanislav Sedov#define chdir _chdir 319*ae771770SStanislav Sedov 320*ae771770SStanislav Sedov#define fsync _commit 321*ae771770SStanislav Sedov 322*ae771770SStanislav Sedov/* The MSVC implementation of snprintf is not C99 compliant. */ 323*ae771770SStanislav Sedov#define snprintf rk_snprintf 324*ae771770SStanislav Sedov#define vsnprintf rk_vsnprintf 325*ae771770SStanislav Sedov#define vasnprintf rk_vasnprintf 326*ae771770SStanislav Sedov#define vasprintf rk_vasprintf 327*ae771770SStanislav Sedov#define asnprintf rk_asnprintf 328*ae771770SStanislav Sedov#define asprintf rk_asprintf 329*ae771770SStanislav Sedov 330*ae771770SStanislav Sedov#define _PIPE_BUFFER_SZ 8192 331*ae771770SStanislav Sedov#define pipe(fds) _pipe((fds), _PIPE_BUFFER_SZ, O_BINARY); 332*ae771770SStanislav Sedov 333*ae771770SStanislav Sedov#define ftruncate(fd, sz) _chsize((fd), (sz)) 334*ae771770SStanislav Sedov 335*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 336*ae771770SStanislav Sedovrk_snprintf (char *str, size_t sz, const char *format, ...); 337*ae771770SStanislav Sedov 338*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 339*ae771770SStanislav Sedovrk_asprintf (char **ret, const char *format, ...); 340*ae771770SStanislav Sedov 341*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 342*ae771770SStanislav Sedovrk_asnprintf (char **ret, size_t max_sz, const char *format, ...); 343*ae771770SStanislav Sedov 344*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 345*ae771770SStanislav Sedovrk_vasprintf (char **ret, const char *format, va_list args); 346*ae771770SStanislav Sedov 347*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 348*ae771770SStanislav Sedovrk_vasnprintf (char **ret, size_t max_sz, const char *format, va_list args); 349*ae771770SStanislav Sedov 350*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 351*ae771770SStanislav Sedovrk_vsnprintf (char *str, size_t sz, const char *format, va_list args); 352*ae771770SStanislav Sedov 353*ae771770SStanislav Sedov/* missing stat.h predicates */ 354*ae771770SStanislav Sedov 355*ae771770SStanislav Sedov#define S_ISREG(m) (((m) & _S_IFREG) == _S_IFREG) 356*ae771770SStanislav Sedov 357*ae771770SStanislav Sedov#define S_ISDIR(m) (((m) & _S_IFDIR) == _S_IFDIR) 358*ae771770SStanislav Sedov 359*ae771770SStanislav Sedov#define S_ISCHR(m) (((m) & _S_IFCHR) == _S_IFCHR) 360*ae771770SStanislav Sedov 361*ae771770SStanislav Sedov#define S_ISFIFO(m) (((m) & _S_IFIFO) == _S_IFIFO) 362*ae771770SStanislav Sedov 363*ae771770SStanislav Sedov/* The following are not implemented: 364*ae771770SStanislav Sedov 365*ae771770SStanislav Sedov S_ISLNK(m) 366*ae771770SStanislav Sedov S_ISSOCK(m) 367*ae771770SStanislav Sedov S_ISBLK(m) 368*ae771770SStanislav Sedov*/ 369*ae771770SStanislav Sedov 370*ae771770SStanislav Sedov#endif /* _MSC_VER */ 371*ae771770SStanislav Sedov 372*ae771770SStanislav Sedov#ifdef HAVE_WINSOCK 373*ae771770SStanislav Sedov 374*ae771770SStanislav Sedov/* While we are at it, define WinSock specific scatter gather socket 375*ae771770SStanislav Sedov I/O. */ 376*ae771770SStanislav Sedov 377*ae771770SStanislav Sedov#define iovec _WSABUF 378*ae771770SStanislav Sedov#define iov_base buf 379*ae771770SStanislav Sedov#define iov_len len 380*ae771770SStanislav Sedov 381*ae771770SStanislav Sedovstruct msghdr { 382*ae771770SStanislav Sedov void *msg_name; 383*ae771770SStanislav Sedov socklen_t msg_namelen; 384*ae771770SStanislav Sedov struct iovec *msg_iov; 385*ae771770SStanislav Sedov size_t msg_iovlen; 386*ae771770SStanislav Sedov void *msg_control; 387*ae771770SStanislav Sedov socklen_t msg_controllen; 388*ae771770SStanislav Sedov int msg_flags; 389*ae771770SStanislav Sedov}; 390*ae771770SStanislav Sedov 391*ae771770SStanislav Sedov#define sendmsg sendmsg_w32 392*ae771770SStanislav Sedov 393*ae771770SStanislav SedovROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL 394*ae771770SStanislav Sedovsendmsg_w32(rk_socket_t s, const struct msghdr * msg, int flags); 395*ae771770SStanislav Sedov 396*ae771770SStanislav Sedov#endif /* HAVE_WINSOCK */ 397*ae771770SStanislav Sedov 398b528cefcSMark Murray#ifndef HAVE_PUTENV 399*ae771770SStanislav Sedov#define putenv rk_putenv 400*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL putenv(const char *); 401b528cefcSMark Murray#endif 402b528cefcSMark Murray 403b528cefcSMark Murray#if !defined(HAVE_SETENV) || defined(NEED_SETENV_PROTO) 404*ae771770SStanislav Sedov#ifndef HAVE_SETENV 405*ae771770SStanislav Sedov#define setenv rk_setenv 406*ae771770SStanislav Sedov#endif 407*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL setenv(const char *, const char *, int); 408b528cefcSMark Murray#endif 409b528cefcSMark Murray 410b528cefcSMark Murray#if !defined(HAVE_UNSETENV) || defined(NEED_UNSETENV_PROTO) 411*ae771770SStanislav Sedov#ifndef HAVE_UNSETENV 412*ae771770SStanislav Sedov#define unsetenv rk_unsetenv 413*ae771770SStanislav Sedov#endif 414*ae771770SStanislav SedovROKEN_LIB_FUNCTION void ROKEN_LIB_CALL unsetenv(const char *); 415b528cefcSMark Murray#endif 416b528cefcSMark Murray 417b528cefcSMark Murray#if !defined(HAVE_GETUSERSHELL) || defined(NEED_GETUSERSHELL_PROTO) 418*ae771770SStanislav Sedov#ifndef HAVE_GETUSERSHELL 419*ae771770SStanislav Sedov#define getusershell rk_getusershell 420*ae771770SStanislav Sedov#define endusershell rk_endusershell 421*ae771770SStanislav Sedov#endif 422*ae771770SStanislav SedovROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL getusershell(void); 423*ae771770SStanislav SedovROKEN_LIB_FUNCTION void ROKEN_LIB_CALL endusershell(void); 424b528cefcSMark Murray#endif 425b528cefcSMark Murray 426b528cefcSMark Murray#if !defined(HAVE_SNPRINTF) || defined(NEED_SNPRINTF_PROTO) 427*ae771770SStanislav Sedov#ifndef HAVE_SNPRINTF 428*ae771770SStanislav Sedov#define snprintf rk_snprintf 429*ae771770SStanislav Sedov#endif 430*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 431*ae771770SStanislav Sedov rk_snprintf (char *, size_t, const char *, ...) 432b528cefcSMark Murray __attribute__ ((format (printf, 3, 4))); 433b528cefcSMark Murray#endif 434b528cefcSMark Murray 435b528cefcSMark Murray#if !defined(HAVE_VSNPRINTF) || defined(NEED_VSNPRINTF_PROTO) 436*ae771770SStanislav Sedov#ifndef HAVE_VSNPRINTF 437*ae771770SStanislav Sedov#define vsnprintf rk_vsnprintf 438*ae771770SStanislav Sedov#endif 439*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 440*ae771770SStanislav Sedov rk_vsnprintf (char *, size_t, const char *, va_list) 441b528cefcSMark Murray __attribute__((format (printf, 3, 0))); 442b528cefcSMark Murray#endif 443b528cefcSMark Murray 444b528cefcSMark Murray#if !defined(HAVE_ASPRINTF) || defined(NEED_ASPRINTF_PROTO) 445*ae771770SStanislav Sedov#ifndef HAVE_ASPRINTF 446*ae771770SStanislav Sedov#define asprintf rk_asprintf 447*ae771770SStanislav Sedov#endif 448*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 449*ae771770SStanislav Sedov rk_asprintf (char **, const char *, ...) 450b528cefcSMark Murray __attribute__ ((format (printf, 2, 3))); 451b528cefcSMark Murray#endif 452b528cefcSMark Murray 453b528cefcSMark Murray#if !defined(HAVE_VASPRINTF) || defined(NEED_VASPRINTF_PROTO) 454*ae771770SStanislav Sedov#ifndef HAVE_VASPRINTF 455*ae771770SStanislav Sedov#define vasprintf rk_vasprintf 456*ae771770SStanislav Sedov#endif 457*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 458*ae771770SStanislav Sedov rk_vasprintf (char **, const char *, va_list) 459b528cefcSMark Murray __attribute__((format (printf, 2, 0))); 460b528cefcSMark Murray#endif 461b528cefcSMark Murray 462b528cefcSMark Murray#if !defined(HAVE_ASNPRINTF) || defined(NEED_ASNPRINTF_PROTO) 463*ae771770SStanislav Sedov#ifndef HAVE_ASNPRINTF 464*ae771770SStanislav Sedov#define asnprintf rk_asnprintf 465*ae771770SStanislav Sedov#endif 466*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 467*ae771770SStanislav Sedov rk_asnprintf (char **, size_t, const char *, ...) 468b528cefcSMark Murray __attribute__ ((format (printf, 3, 4))); 469b528cefcSMark Murray#endif 470b528cefcSMark Murray 471b528cefcSMark Murray#if !defined(HAVE_VASNPRINTF) || defined(NEED_VASNPRINTF_PROTO) 472*ae771770SStanislav Sedov#ifndef HAVE_VASNPRINTF 473*ae771770SStanislav Sedov#define vasnprintf rk_vasnprintf 474*ae771770SStanislav Sedov#endif 475*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 476c19800e8SDoug Rabson vasnprintf (char **, size_t, const char *, va_list) 477b528cefcSMark Murray __attribute__((format (printf, 3, 0))); 478b528cefcSMark Murray#endif 479b528cefcSMark Murray 480b528cefcSMark Murray#ifndef HAVE_STRDUP 481*ae771770SStanislav Sedov#define strdup rk_strdup 482*ae771770SStanislav SedovROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strdup(const char *); 483b528cefcSMark Murray#endif 484b528cefcSMark Murray 4858373020dSJacques Vidrine#if !defined(HAVE_STRNDUP) || defined(NEED_STRNDUP_PROTO) 486*ae771770SStanislav Sedov#ifndef HAVE_STRNDUP 487*ae771770SStanislav Sedov#define strndup rk_strndup 488*ae771770SStanislav Sedov#endif 489*ae771770SStanislav SedovROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strndup(const char *, size_t); 490b528cefcSMark Murray#endif 491b528cefcSMark Murray 492b528cefcSMark Murray#ifndef HAVE_STRLWR 493*ae771770SStanislav Sedov#define strlwr rk_strlwr 494*ae771770SStanislav SedovROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strlwr(char *); 495b528cefcSMark Murray#endif 496b528cefcSMark Murray 497b528cefcSMark Murray#ifndef HAVE_STRNLEN 498*ae771770SStanislav Sedov#define strnlen rk_strnlen 499*ae771770SStanislav SedovROKEN_LIB_FUNCTION size_t ROKEN_LIB_CALL strnlen(const char*, size_t); 500b528cefcSMark Murray#endif 501b528cefcSMark Murray 502b528cefcSMark Murray#if !defined(HAVE_STRSEP) || defined(NEED_STRSEP_PROTO) 503*ae771770SStanislav Sedov#ifndef HAVE_STRSEP 504*ae771770SStanislav Sedov#define strsep rk_strsep 505*ae771770SStanislav Sedov#endif 506*ae771770SStanislav SedovROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strsep(char**, const char*); 507b528cefcSMark Murray#endif 508b528cefcSMark Murray 5095e9cd1aeSAssar Westerlund#if !defined(HAVE_STRSEP_COPY) || defined(NEED_STRSEP_COPY_PROTO) 510*ae771770SStanislav Sedov#ifndef HAVE_STRSEP_COPY 511*ae771770SStanislav Sedov#define strsep_copy rk_strsep_copy 512*ae771770SStanislav Sedov#endif 513*ae771770SStanislav SedovROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL strsep_copy(const char**, const char*, char*, size_t); 5145e9cd1aeSAssar Westerlund#endif 5155e9cd1aeSAssar Westerlund 516b528cefcSMark Murray#ifndef HAVE_STRCASECMP 517*ae771770SStanislav Sedov#define strcasecmp rk_strcasecmp 518*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL strcasecmp(const char *, const char *); 519b528cefcSMark Murray#endif 520b528cefcSMark Murray 521b528cefcSMark Murray#ifdef NEED_FCLOSE_PROTO 522*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL fclose(FILE *); 523b528cefcSMark Murray#endif 524b528cefcSMark Murray 525b528cefcSMark Murray#ifdef NEED_STRTOK_R_PROTO 526*ae771770SStanislav SedovROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strtok_r(char *, const char *, char **); 527b528cefcSMark Murray#endif 528b528cefcSMark Murray 529b528cefcSMark Murray#ifndef HAVE_STRUPR 530*ae771770SStanislav Sedov#define strupr rk_strupr 531*ae771770SStanislav SedovROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strupr(char *); 532b528cefcSMark Murray#endif 533b528cefcSMark Murray 534b528cefcSMark Murray#ifndef HAVE_STRLCPY 535*ae771770SStanislav Sedov#define strlcpy rk_strlcpy 536*ae771770SStanislav SedovROKEN_LIB_FUNCTION size_t ROKEN_LIB_CALL strlcpy (char *, const char *, size_t); 537b528cefcSMark Murray#endif 538b528cefcSMark Murray 539b528cefcSMark Murray#ifndef HAVE_STRLCAT 540*ae771770SStanislav Sedov#define strlcat rk_strlcat 541*ae771770SStanislav SedovROKEN_LIB_FUNCTION size_t ROKEN_LIB_CALL strlcat (char *, const char *, size_t); 542b528cefcSMark Murray#endif 543b528cefcSMark Murray 544b528cefcSMark Murray#ifndef HAVE_GETDTABLESIZE 545*ae771770SStanislav Sedov#define getdtablesize rk_getdtablesize 546*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL getdtablesize(void); 547b528cefcSMark Murray#endif 548b528cefcSMark Murray 549b528cefcSMark Murray#if !defined(HAVE_STRERROR) && !defined(strerror) 550*ae771770SStanislav Sedov#define strerror rk_strerror 551*ae771770SStanislav SedovROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strerror(int); 552*ae771770SStanislav Sedov#endif 553*ae771770SStanislav Sedov 554*ae771770SStanislav Sedov#if (!defined(HAVE_STRERROR_R) && !defined(strerror_r)) || (!defined(STRERROR_R_PROTO_COMPATIBLE) && defined(HAVE_STRERROR_R)) 555*ae771770SStanislav Sedovint ROKEN_LIB_FUNCTION rk_strerror_r(int, char *, size_t); 556*ae771770SStanislav Sedov#else 557*ae771770SStanislav Sedov#define rk_strerror_r strerror_r 558b528cefcSMark Murray#endif 559b528cefcSMark Murray 560b528cefcSMark Murray#if !defined(HAVE_HSTRERROR) || defined(NEED_HSTRERROR_PROTO) 561*ae771770SStanislav Sedov#ifndef HAVE_HSTRERROR 562*ae771770SStanislav Sedov#define hstrerror rk_hstrerror 563*ae771770SStanislav Sedov#endif 564b528cefcSMark Murray/* This causes a fatal error under Psoriasis */ 565*ae771770SStanislav Sedov#ifndef SunOS 566*ae771770SStanislav SedovROKEN_LIB_FUNCTION const char * ROKEN_LIB_CALL hstrerror(int); 567b528cefcSMark Murray#endif 568b528cefcSMark Murray#endif 569b528cefcSMark Murray 570c19800e8SDoug Rabson#if !HAVE_DECL_H_ERRNO 571b528cefcSMark Murrayextern int h_errno; 572b528cefcSMark Murray#endif 573b528cefcSMark Murray 574b528cefcSMark Murray#if !defined(HAVE_INET_ATON) || defined(NEED_INET_ATON_PROTO) 575*ae771770SStanislav Sedov#ifndef HAVE_INET_ATON 576*ae771770SStanislav Sedov#define inet_aton rk_inet_aton 577*ae771770SStanislav Sedov#endif 578*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL inet_aton(const char *, struct in_addr *); 579b528cefcSMark Murray#endif 580b528cefcSMark Murray 581b528cefcSMark Murray#ifndef HAVE_INET_NTOP 582*ae771770SStanislav Sedov#define inet_ntop rk_inet_ntop 583*ae771770SStanislav SedovROKEN_LIB_FUNCTION const char * ROKEN_LIB_CALL 584b528cefcSMark Murrayinet_ntop(int af, const void *src, char *dst, size_t size); 585b528cefcSMark Murray#endif 586b528cefcSMark Murray 587b528cefcSMark Murray#ifndef HAVE_INET_PTON 588*ae771770SStanislav Sedov#define inet_pton rk_inet_pton 589*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 590c19800e8SDoug Rabsoninet_pton(int, const char *, void *); 591b528cefcSMark Murray#endif 592b528cefcSMark Murray 593*ae771770SStanislav Sedov#ifndef HAVE_GETCWD 594*ae771770SStanislav Sedov#define getcwd rk_getcwd 595*ae771770SStanislav SedovROKEN_LIB_FUNCTION char* ROKEN_LIB_CALL getcwd(char *, size_t); 596b528cefcSMark Murray#endif 597b528cefcSMark Murray 598b528cefcSMark Murray#ifdef HAVE_PWD_H 599b528cefcSMark Murray#include <pwd.h> 600*ae771770SStanislav SedovROKEN_LIB_FUNCTION struct passwd * ROKEN_LIB_CALL k_getpwnam (const char *); 601*ae771770SStanislav SedovROKEN_LIB_FUNCTION struct passwd * ROKEN_LIB_CALL k_getpwuid (uid_t); 602b528cefcSMark Murray#endif 603b528cefcSMark Murray 604*ae771770SStanislav SedovROKEN_LIB_FUNCTION const char * ROKEN_LIB_CALL get_default_username (void); 605b528cefcSMark Murray 606b528cefcSMark Murray#ifndef HAVE_SETEUID 607*ae771770SStanislav Sedov#define seteuid rk_seteuid 608*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL seteuid(uid_t); 609b528cefcSMark Murray#endif 610b528cefcSMark Murray 611b528cefcSMark Murray#ifndef HAVE_SETEGID 612*ae771770SStanislav Sedov#define setegid rk_setegid 613*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL setegid(gid_t); 614b528cefcSMark Murray#endif 615b528cefcSMark Murray 616b528cefcSMark Murray#ifndef HAVE_LSTAT 617*ae771770SStanislav Sedov#define lstat rk_lstat 618*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL lstat(const char *, struct stat *); 619b528cefcSMark Murray#endif 620b528cefcSMark Murray 621b528cefcSMark Murray#if !defined(HAVE_MKSTEMP) || defined(NEED_MKSTEMP_PROTO) 622*ae771770SStanislav Sedov#ifndef HAVE_MKSTEMP 623*ae771770SStanislav Sedov#define mkstemp rk_mkstemp 624*ae771770SStanislav Sedov#endif 625*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL mkstemp(char *); 626b528cefcSMark Murray#endif 627b528cefcSMark Murray 628b528cefcSMark Murray#ifndef HAVE_CGETENT 629*ae771770SStanislav Sedov#define cgetent rk_cgetent 630*ae771770SStanislav Sedov#define cgetstr rk_cgetstr 631*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL cgetent(char **, char **, const char *); 632*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL cgetstr(char *, const char *, char **); 633b528cefcSMark Murray#endif 634b528cefcSMark Murray 635b528cefcSMark Murray#ifndef HAVE_INITGROUPS 636*ae771770SStanislav Sedov#define initgroups rk_initgroups 637*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL initgroups(const char *, gid_t); 638b528cefcSMark Murray#endif 639b528cefcSMark Murray 640b528cefcSMark Murray#ifndef HAVE_FCHOWN 641*ae771770SStanislav Sedov#define fchown rk_fchown 642*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL fchown(int, uid_t, gid_t); 643*ae771770SStanislav Sedov#endif 644*ae771770SStanislav Sedov 645*ae771770SStanislav Sedov#ifdef RENAME_DOES_NOT_UNLINK 646*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL rk_rename(const char *, const char *); 647*ae771770SStanislav Sedov#else 648*ae771770SStanislav Sedov#define rk_rename(__rk_rn_from,__rk_rn_to) rename(__rk_rn_from,__rk_rn_to) 649b528cefcSMark Murray#endif 650b528cefcSMark Murray 651c19800e8SDoug Rabson#if !defined(HAVE_DAEMON) || defined(NEED_DAEMON_PROTO) 652*ae771770SStanislav Sedov#ifndef HAVE_DAEMON 653*ae771770SStanislav Sedov#define daemon rk_daemon 654b528cefcSMark Murray#endif 655*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL daemon(int, int); 656b528cefcSMark Murray#endif 657b528cefcSMark Murray 658b528cefcSMark Murray#ifndef HAVE_CHOWN 659*ae771770SStanislav Sedov#define chown rk_chown 660*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL chown(const char *, uid_t, gid_t); 661b528cefcSMark Murray#endif 662b528cefcSMark Murray 663b528cefcSMark Murray#ifndef HAVE_RCMD 664*ae771770SStanislav Sedov#define rcmd rk_rcmd 665*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 666c19800e8SDoug Rabson rcmd(char **, unsigned short, const char *, 667c19800e8SDoug Rabson const char *, const char *, int *); 668b528cefcSMark Murray#endif 669b528cefcSMark Murray 670b528cefcSMark Murray#if !defined(HAVE_INNETGR) || defined(NEED_INNETGR_PROTO) 671*ae771770SStanislav Sedov#ifndef HAVE_INNETGR 672*ae771770SStanislav Sedov#define innetgr rk_innetgr 673*ae771770SStanislav Sedov#endif 674*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL innetgr(const char*, const char*, 675c19800e8SDoug Rabson const char*, const char*); 676b528cefcSMark Murray#endif 677b528cefcSMark Murray 678b528cefcSMark Murray#ifndef HAVE_IRUSEROK 679*ae771770SStanislav Sedov#define iruserok rk_iruserok 680*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL iruserok(unsigned, int, 681c19800e8SDoug Rabson const char *, const char *); 682b528cefcSMark Murray#endif 683b528cefcSMark Murray 684b528cefcSMark Murray#if !defined(HAVE_GETHOSTNAME) || defined(NEED_GETHOSTNAME_PROTO) 685*ae771770SStanislav Sedov#ifndef HAVE_GETHOSTNAME 686*ae771770SStanislav Sedov#define gethostname rk_gethostname 687*ae771770SStanislav Sedov#endif 688*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL gethostname(char *, int); 689b528cefcSMark Murray#endif 690b528cefcSMark Murray 691b528cefcSMark Murray#ifndef HAVE_WRITEV 692*ae771770SStanislav Sedov#define writev rk_writev 693*ae771770SStanislav SedovROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL 694c19800e8SDoug Rabsonwritev(int, const struct iovec *, int); 695b528cefcSMark Murray#endif 696b528cefcSMark Murray 697b528cefcSMark Murray#ifndef HAVE_READV 698*ae771770SStanislav Sedov#define readv rk_readv 699*ae771770SStanislav SedovROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL 700c19800e8SDoug Rabsonreadv(int, const struct iovec *, int); 701b528cefcSMark Murray#endif 702b528cefcSMark Murray 7035e9cd1aeSAssar Westerlund#ifndef HAVE_PIDFILE 704*ae771770SStanislav Sedov#ifdef NO_PIDFILES 705*ae771770SStanislav Sedov#define pidfile(x) ((void) 0) 706*ae771770SStanislav Sedov#else 707*ae771770SStanislav Sedov#define pidfile rk_pidfile 708*ae771770SStanislav SedovROKEN_LIB_FUNCTION void ROKEN_LIB_CALL pidfile (const char*); 709*ae771770SStanislav Sedov#endif 7105e9cd1aeSAssar Westerlund#endif 7115e9cd1aeSAssar Westerlund 712adb0ddaeSAssar Westerlund#ifndef HAVE_BSWAP32 713*ae771770SStanislav Sedov#define bswap32 rk_bswap32 714*ae771770SStanislav SedovROKEN_LIB_FUNCTION unsigned int ROKEN_LIB_CALL bswap32(unsigned int); 715adb0ddaeSAssar Westerlund#endif 716adb0ddaeSAssar Westerlund 717adb0ddaeSAssar Westerlund#ifndef HAVE_BSWAP16 718*ae771770SStanislav Sedov#define bswap16 rk_bswap16 719*ae771770SStanislav SedovROKEN_LIB_FUNCTION unsigned short ROKEN_LIB_CALL bswap16(unsigned short); 720adb0ddaeSAssar Westerlund#endif 721adb0ddaeSAssar Westerlund 722b528cefcSMark Murray#ifndef HAVE_FLOCK 723b528cefcSMark Murray#ifndef LOCK_SH 724b528cefcSMark Murray#define LOCK_SH 1 /* Shared lock */ 725b528cefcSMark Murray#endif 726b528cefcSMark Murray#ifndef LOCK_EX 727b528cefcSMark Murray#define LOCK_EX 2 /* Exclusive lock */ 728b528cefcSMark Murray#endif 729b528cefcSMark Murray#ifndef LOCK_NB 730b528cefcSMark Murray#define LOCK_NB 4 /* Don't block when locking */ 731b528cefcSMark Murray#endif 732b528cefcSMark Murray#ifndef LOCK_UN 733b528cefcSMark Murray#define LOCK_UN 8 /* Unlock */ 734b528cefcSMark Murray#endif 735b528cefcSMark Murray 736*ae771770SStanislav Sedov#define flock(_x,_y) rk_flock(_x,_y) 737*ae771770SStanislav Sedovint rk_flock(int fd, int operation); 738b528cefcSMark Murray#endif /* HAVE_FLOCK */ 739b528cefcSMark Murray 740*ae771770SStanislav Sedov#ifndef HAVE_DIRFD 741*ae771770SStanislav Sedov#ifdef HAVE_DIR_DD_FD 742*ae771770SStanislav Sedov#define dirfd(x) ((x)->dd_fd) 743*ae771770SStanislav Sedov#else 744*ae771770SStanislav Sedov#ifndef _WIN32 /* Windows code never calls dirfd */ 745*ae771770SStanislav Sedov#error Missing dirfd() and ->dd_fd 746*ae771770SStanislav Sedov#endif 747*ae771770SStanislav Sedov#endif 748*ae771770SStanislav Sedov#endif 749b528cefcSMark Murray 750*ae771770SStanislav SedovROKEN_LIB_FUNCTION time_t ROKEN_LIB_CALL tm2time (struct tm, int); 751b528cefcSMark Murray 752*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL unix_verify_user(char *, char *); 753b528cefcSMark Murray 754*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL roken_concat (char *, size_t, ...); 755b528cefcSMark Murray 756*ae771770SStanislav SedovROKEN_LIB_FUNCTION size_t ROKEN_LIB_CALL roken_mconcat (char **, size_t, ...); 757b528cefcSMark Murray 758*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL roken_vconcat (char *, size_t, va_list); 759*ae771770SStanislav Sedov 760*ae771770SStanislav SedovROKEN_LIB_FUNCTION size_t ROKEN_LIB_CALL 761c19800e8SDoug Rabson roken_vmconcat (char **, size_t, va_list); 762b528cefcSMark Murray 763*ae771770SStanislav SedovROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL 764*ae771770SStanislav Sedov net_write (rk_socket_t, const void *, size_t); 765b528cefcSMark Murray 766*ae771770SStanislav SedovROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL 767*ae771770SStanislav Sedov net_read (rk_socket_t, void *, size_t); 768b528cefcSMark Murray 769*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 770*ae771770SStanislav Sedov issuid(void); 771b528cefcSMark Murray 772b528cefcSMark Murray#ifndef HAVE_STRUCT_WINSIZE 773b528cefcSMark Murraystruct winsize { 774b528cefcSMark Murray unsigned short ws_row, ws_col; 775b528cefcSMark Murray unsigned short ws_xpixel, ws_ypixel; 776b528cefcSMark Murray}; 777b528cefcSMark Murray#endif 778b528cefcSMark Murray 779*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL get_window_size(int fd, int *, int *); 780b528cefcSMark Murray 781b528cefcSMark Murray#ifndef HAVE_VSYSLOG 782*ae771770SStanislav Sedov#define vsyslog rk_vsyslog 783*ae771770SStanislav SedovROKEN_LIB_FUNCTION void ROKEN_LIB_CALL vsyslog(int, const char *, va_list); 784*ae771770SStanislav Sedov#endif 785*ae771770SStanislav Sedov 786*ae771770SStanislav Sedov#ifndef HAVE_GETOPT 787*ae771770SStanislav Sedov#define getopt rk_getopt 788*ae771770SStanislav Sedov#define optarg rk_optarg 789*ae771770SStanislav Sedov#define optind rk_optind 790*ae771770SStanislav Sedov#define opterr rk_opterr 791*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 792*ae771770SStanislav Sedovgetopt(int nargc, char * const *nargv, const char *ostr); 793b528cefcSMark Murray#endif 794b528cefcSMark Murray 795c19800e8SDoug Rabson#if !HAVE_DECL_OPTARG 796*ae771770SStanislav SedovROKEN_LIB_VARIABLE extern char *optarg; 797b528cefcSMark Murray#endif 798c19800e8SDoug Rabson#if !HAVE_DECL_OPTIND 799*ae771770SStanislav SedovROKEN_LIB_VARIABLE extern int optind; 800b528cefcSMark Murray#endif 801c19800e8SDoug Rabson#if !HAVE_DECL_OPTERR 802*ae771770SStanislav SedovROKEN_LIB_VARIABLE extern int opterr; 803b528cefcSMark Murray#endif 804b528cefcSMark Murray 805b528cefcSMark Murray#ifndef HAVE_GETIPNODEBYNAME 806*ae771770SStanislav Sedov#define getipnodebyname rk_getipnodebyname 807*ae771770SStanislav SedovROKEN_LIB_FUNCTION struct hostent * ROKEN_LIB_CALL 808c19800e8SDoug Rabsongetipnodebyname (const char *, int, int, int *); 809b528cefcSMark Murray#endif 810b528cefcSMark Murray 811b528cefcSMark Murray#ifndef HAVE_GETIPNODEBYADDR 812*ae771770SStanislav Sedov#define getipnodebyaddr rk_getipnodebyaddr 813*ae771770SStanislav SedovROKEN_LIB_FUNCTION struct hostent * ROKEN_LIB_CALL 814c19800e8SDoug Rabsongetipnodebyaddr (const void *, size_t, int, int *); 815b528cefcSMark Murray#endif 816b528cefcSMark Murray 817b528cefcSMark Murray#ifndef HAVE_FREEHOSTENT 818*ae771770SStanislav Sedov#define freehostent rk_freehostent 819*ae771770SStanislav SedovROKEN_LIB_FUNCTION void ROKEN_LIB_CALL 820c19800e8SDoug Rabsonfreehostent (struct hostent *); 821b528cefcSMark Murray#endif 822b528cefcSMark Murray 823b528cefcSMark Murray#ifndef HAVE_COPYHOSTENT 824*ae771770SStanislav Sedov#define copyhostent rk_copyhostent 825*ae771770SStanislav SedovROKEN_LIB_FUNCTION struct hostent * ROKEN_LIB_CALL 826c19800e8SDoug Rabsoncopyhostent (const struct hostent *); 827b528cefcSMark Murray#endif 828b528cefcSMark Murray 829b528cefcSMark Murray#ifndef HAVE_SOCKLEN_T 830b528cefcSMark Murraytypedef int socklen_t; 831b528cefcSMark Murray#endif 832b528cefcSMark Murray 833b528cefcSMark Murray#ifndef HAVE_STRUCT_SOCKADDR_STORAGE 834b528cefcSMark Murray 835b528cefcSMark Murray#ifndef HAVE_SA_FAMILY_T 836b528cefcSMark Murraytypedef unsigned short sa_family_t; 837b528cefcSMark Murray#endif 838b528cefcSMark Murray 839b528cefcSMark Murray#ifdef HAVE_IPV6 840b528cefcSMark Murray#define _SS_MAXSIZE sizeof(struct sockaddr_in6) 841b528cefcSMark Murray#else 842b528cefcSMark Murray#define _SS_MAXSIZE sizeof(struct sockaddr_in) 843b528cefcSMark Murray#endif 844b528cefcSMark Murray 845b528cefcSMark Murray#define _SS_ALIGNSIZE sizeof(unsigned long) 846b528cefcSMark Murray 847b528cefcSMark Murray#if HAVE_STRUCT_SOCKADDR_SA_LEN 848b528cefcSMark Murray 849b528cefcSMark Murraytypedef unsigned char roken_sa_family_t; 850b528cefcSMark Murray 8515e9cd1aeSAssar Westerlund#define _SS_PAD1SIZE ((2 * _SS_ALIGNSIZE - sizeof (roken_sa_family_t) - sizeof(unsigned char)) % _SS_ALIGNSIZE) 852b528cefcSMark Murray#define _SS_PAD2SIZE (_SS_MAXSIZE - (sizeof (roken_sa_family_t) + sizeof(unsigned char) + _SS_PAD1SIZE + _SS_ALIGNSIZE)) 853b528cefcSMark Murray 854b528cefcSMark Murraystruct sockaddr_storage { 855b528cefcSMark Murray unsigned char ss_len; 856b528cefcSMark Murray roken_sa_family_t ss_family; 857b528cefcSMark Murray char __ss_pad1[_SS_PAD1SIZE]; 858b528cefcSMark Murray unsigned long __ss_align[_SS_PAD2SIZE / sizeof(unsigned long) + 1]; 859b528cefcSMark Murray}; 860b528cefcSMark Murray 861b528cefcSMark Murray#else /* !HAVE_STRUCT_SOCKADDR_SA_LEN */ 862b528cefcSMark Murray 863b528cefcSMark Murraytypedef unsigned short roken_sa_family_t; 864b528cefcSMark Murray 8655e9cd1aeSAssar Westerlund#define _SS_PAD1SIZE ((2 * _SS_ALIGNSIZE - sizeof (roken_sa_family_t)) % _SS_ALIGNSIZE) 866b528cefcSMark Murray#define _SS_PAD2SIZE (_SS_MAXSIZE - (sizeof (roken_sa_family_t) + _SS_PAD1SIZE + _SS_ALIGNSIZE)) 867b528cefcSMark Murray 868b528cefcSMark Murraystruct sockaddr_storage { 869b528cefcSMark Murray roken_sa_family_t ss_family; 870b528cefcSMark Murray char __ss_pad1[_SS_PAD1SIZE]; 871b528cefcSMark Murray unsigned long __ss_align[_SS_PAD2SIZE / sizeof(unsigned long) + 1]; 872b528cefcSMark Murray}; 873b528cefcSMark Murray 874b528cefcSMark Murray#endif /* HAVE_STRUCT_SOCKADDR_SA_LEN */ 875b528cefcSMark Murray 876b528cefcSMark Murray#endif /* HAVE_STRUCT_SOCKADDR_STORAGE */ 877b528cefcSMark Murray 878b528cefcSMark Murray#ifndef HAVE_STRUCT_ADDRINFO 879b528cefcSMark Murraystruct addrinfo { 880b528cefcSMark Murray int ai_flags; 881b528cefcSMark Murray int ai_family; 882b528cefcSMark Murray int ai_socktype; 883b528cefcSMark Murray int ai_protocol; 884b528cefcSMark Murray size_t ai_addrlen; 885b528cefcSMark Murray char *ai_canonname; 886b528cefcSMark Murray struct sockaddr *ai_addr; 887b528cefcSMark Murray struct addrinfo *ai_next; 888b528cefcSMark Murray}; 889b528cefcSMark Murray#endif 890b528cefcSMark Murray 891b528cefcSMark Murray#ifndef HAVE_GETADDRINFO 892*ae771770SStanislav Sedov#define getaddrinfo rk_getaddrinfo 893*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 894c19800e8SDoug Rabsongetaddrinfo(const char *, 895c19800e8SDoug Rabson const char *, 896c19800e8SDoug Rabson const struct addrinfo *, 897c19800e8SDoug Rabson struct addrinfo **); 898b528cefcSMark Murray#endif 899b528cefcSMark Murray 900b528cefcSMark Murray#ifndef HAVE_GETNAMEINFO 901*ae771770SStanislav Sedov#define getnameinfo rk_getnameinfo 902*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 903c19800e8SDoug Rabsongetnameinfo(const struct sockaddr *, socklen_t, 904c19800e8SDoug Rabson char *, size_t, 905c19800e8SDoug Rabson char *, size_t, 906c19800e8SDoug Rabson int); 907b528cefcSMark Murray#endif 908b528cefcSMark Murray 909b528cefcSMark Murray#ifndef HAVE_FREEADDRINFO 910*ae771770SStanislav Sedov#define freeaddrinfo rk_freeaddrinfo 911*ae771770SStanislav SedovROKEN_LIB_FUNCTION void ROKEN_LIB_CALL 912c19800e8SDoug Rabsonfreeaddrinfo(struct addrinfo *); 913b528cefcSMark Murray#endif 914b528cefcSMark Murray 915b528cefcSMark Murray#ifndef HAVE_GAI_STRERROR 916*ae771770SStanislav Sedov#define gai_strerror rk_gai_strerror 917*ae771770SStanislav SedovROKEN_LIB_FUNCTION const char * ROKEN_LIB_CALL 918c19800e8SDoug Rabsongai_strerror(int); 919b528cefcSMark Murray#endif 920b528cefcSMark Murray 921*ae771770SStanislav Sedov#ifdef NO_SLEEP 922*ae771770SStanislav Sedov 923*ae771770SStanislav SedovROKEN_LIB_FUNCTION unsigned int ROKEN_LIB_CALL 924*ae771770SStanislav Sedovsleep(unsigned int seconds); 925*ae771770SStanislav Sedov 926*ae771770SStanislav Sedov#endif 927*ae771770SStanislav Sedov 928*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 929c19800e8SDoug Rabsongetnameinfo_verified(const struct sockaddr *, socklen_t, 930c19800e8SDoug Rabson char *, size_t, 931c19800e8SDoug Rabson char *, size_t, 932c19800e8SDoug Rabson int); 933b528cefcSMark Murray 934*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 935c19800e8SDoug Rabsonroken_getaddrinfo_hostspec(const char *, int, struct addrinfo **); 936*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 937c19800e8SDoug Rabsonroken_getaddrinfo_hostspec2(const char *, int, int, struct addrinfo **); 938283d988cSMark Murray 939b528cefcSMark Murray#ifndef HAVE_STRFTIME 940*ae771770SStanislav Sedov#define strftime rk_strftime 941*ae771770SStanislav SedovROKEN_LIB_FUNCTION size_t ROKEN_LIB_CALL 942c19800e8SDoug Rabsonstrftime (char *, size_t, const char *, const struct tm *); 943b528cefcSMark Murray#endif 944b528cefcSMark Murray 945b528cefcSMark Murray#ifndef HAVE_STRPTIME 946*ae771770SStanislav Sedov#define strptime rk_strptime 947*ae771770SStanislav SedovROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL 948c19800e8SDoug Rabsonstrptime (const char *, const char *, struct tm *); 949b528cefcSMark Murray#endif 950b528cefcSMark Murray 951*ae771770SStanislav Sedov#ifndef HAVE_GETTIMEOFDAY 952*ae771770SStanislav Sedov#define gettimeofday rk_gettimeofday 953*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 954*ae771770SStanislav Sedovgettimeofday (struct timeval *, void *); 955*ae771770SStanislav Sedov#endif 956*ae771770SStanislav Sedov 9574137ff4cSJacques Vidrine#ifndef HAVE_EMALLOC 958*ae771770SStanislav Sedov#define emalloc rk_emalloc 959*ae771770SStanislav SedovROKEN_LIB_FUNCTION void * ROKEN_LIB_CALL emalloc (size_t); 9604137ff4cSJacques Vidrine#endif 9614137ff4cSJacques Vidrine#ifndef HAVE_ECALLOC 962*ae771770SStanislav Sedov#define ecalloc rk_ecalloc 963*ae771770SStanislav SedovROKEN_LIB_FUNCTION void * ROKEN_LIB_CALL ecalloc(size_t, size_t); 9644137ff4cSJacques Vidrine#endif 9654137ff4cSJacques Vidrine#ifndef HAVE_EREALLOC 966*ae771770SStanislav Sedov#define erealloc rk_erealloc 967*ae771770SStanislav SedovROKEN_LIB_FUNCTION void * ROKEN_LIB_CALL erealloc (void *, size_t); 9684137ff4cSJacques Vidrine#endif 9694137ff4cSJacques Vidrine#ifndef HAVE_ESTRDUP 970*ae771770SStanislav Sedov#define estrdup rk_estrdup 971*ae771770SStanislav SedovROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL estrdup (const char *); 9724137ff4cSJacques Vidrine#endif 9734137ff4cSJacques Vidrine 974b528cefcSMark Murray/* 975b528cefcSMark Murray * kludges and such 976b528cefcSMark Murray */ 977b528cefcSMark Murray 978*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 979c19800e8SDoug Rabsonroken_gethostby_setup(const char*, const char*); 980*ae771770SStanislav SedovROKEN_LIB_FUNCTION struct hostent* ROKEN_LIB_CALL 981c19800e8SDoug Rabsonroken_gethostbyname(const char*); 982*ae771770SStanislav SedovROKEN_LIB_FUNCTION struct hostent* ROKEN_LIB_CALL 983c19800e8SDoug Rabsonroken_gethostbyaddr(const void*, size_t, int); 984b528cefcSMark Murray 985b528cefcSMark Murray#ifdef GETSERVBYNAME_PROTO_COMPATIBLE 986b528cefcSMark Murray#define roken_getservbyname(x,y) getservbyname(x,y) 987b528cefcSMark Murray#else 988b528cefcSMark Murray#define roken_getservbyname(x,y) getservbyname((char *)x, (char *)y) 989b528cefcSMark Murray#endif 990b528cefcSMark Murray 991b528cefcSMark Murray#ifdef OPENLOG_PROTO_COMPATIBLE 992b528cefcSMark Murray#define roken_openlog(a,b,c) openlog(a,b,c) 993b528cefcSMark Murray#else 994b528cefcSMark Murray#define roken_openlog(a,b,c) openlog((char *)a,b,c) 995b528cefcSMark Murray#endif 996b528cefcSMark Murray 9975e9cd1aeSAssar Westerlund#ifdef GETSOCKNAME_PROTO_COMPATIBLE 9985e9cd1aeSAssar Westerlund#define roken_getsockname(a,b,c) getsockname(a,b,c) 9995e9cd1aeSAssar Westerlund#else 10005e9cd1aeSAssar Westerlund#define roken_getsockname(a,b,c) getsockname(a, b, (void*)c) 1001b528cefcSMark Murray#endif 10025e9cd1aeSAssar Westerlund 1003adb0ddaeSAssar Westerlund#ifndef HAVE_SETPROGNAME 1004*ae771770SStanislav Sedov#define setprogname rk_setprogname 1005*ae771770SStanislav SedovROKEN_LIB_FUNCTION void ROKEN_LIB_CALL setprogname(const char *); 1006adb0ddaeSAssar Westerlund#endif 1007adb0ddaeSAssar Westerlund 1008adb0ddaeSAssar Westerlund#ifndef HAVE_GETPROGNAME 1009*ae771770SStanislav Sedov#define getprogname rk_getprogname 1010*ae771770SStanislav SedovROKEN_LIB_FUNCTION const char * ROKEN_LIB_CALL getprogname(void); 1011adb0ddaeSAssar Westerlund#endif 1012adb0ddaeSAssar Westerlund 1013c19800e8SDoug Rabson#if !defined(HAVE_SETPROGNAME) && !defined(HAVE_GETPROGNAME) && !HAVE_DECL___PROGNAME 1014c19800e8SDoug Rabsonextern const char *__progname; 1015c19800e8SDoug Rabson#endif 10168373020dSJacques Vidrine 1017*ae771770SStanislav SedovROKEN_LIB_FUNCTION void ROKEN_LIB_CALL 1018*ae771770SStanislav Sedovmini_inetd_addrinfo (struct addrinfo*, rk_socket_t *); 1019*ae771770SStanislav Sedov 1020*ae771770SStanislav SedovROKEN_LIB_FUNCTION void ROKEN_LIB_CALL 1021*ae771770SStanislav Sedovmini_inetd (int, rk_socket_t *); 10225e9cd1aeSAssar Westerlund 10234137ff4cSJacques Vidrine#ifndef HAVE_LOCALTIME_R 1024*ae771770SStanislav Sedov#define localtime_r rk_localtime_r 1025*ae771770SStanislav SedovROKEN_LIB_FUNCTION struct tm * ROKEN_LIB_CALL 1026c19800e8SDoug Rabsonlocaltime_r(const time_t *, struct tm *); 10274137ff4cSJacques Vidrine#endif 10284137ff4cSJacques Vidrine 10298373020dSJacques Vidrine#if !defined(HAVE_STRSVIS) || defined(NEED_STRSVIS_PROTO) 1030*ae771770SStanislav Sedov#ifndef HAVE_STRSVIS 1031*ae771770SStanislav Sedov#define strsvis rk_strsvis 1032*ae771770SStanislav Sedov#endif 1033*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 1034c19800e8SDoug Rabsonstrsvis(char *, const char *, int, const char *); 10358373020dSJacques Vidrine#endif 10368373020dSJacques Vidrine 1037*ae771770SStanislav Sedov#if !defined(HAVE_STRSVISX) || defined(NEED_STRSVISX_PROTO) 1038*ae771770SStanislav Sedov#ifndef HAVE_STRSVISX 1039*ae771770SStanislav Sedov#define strsvisx rk_strsvisx 1040*ae771770SStanislav Sedov#endif 1041*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 1042*ae771770SStanislav Sedovstrsvisx(char *, const char *, size_t, int, const char *); 1043*ae771770SStanislav Sedov#endif 1044*ae771770SStanislav Sedov 10458373020dSJacques Vidrine#if !defined(HAVE_STRUNVIS) || defined(NEED_STRUNVIS_PROTO) 1046*ae771770SStanislav Sedov#ifndef HAVE_STRUNVIS 1047*ae771770SStanislav Sedov#define strunvis rk_strunvis 1048*ae771770SStanislav Sedov#endif 1049*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 1050c19800e8SDoug Rabsonstrunvis(char *, const char *); 10518373020dSJacques Vidrine#endif 10528373020dSJacques Vidrine 10538373020dSJacques Vidrine#if !defined(HAVE_STRVIS) || defined(NEED_STRVIS_PROTO) 1054*ae771770SStanislav Sedov#ifndef HAVE_STRVIS 1055*ae771770SStanislav Sedov#define strvis rk_strvis 1056*ae771770SStanislav Sedov#endif 1057*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 1058c19800e8SDoug Rabsonstrvis(char *, const char *, int); 10598373020dSJacques Vidrine#endif 10608373020dSJacques Vidrine 10618373020dSJacques Vidrine#if !defined(HAVE_STRVISX) || defined(NEED_STRVISX_PROTO) 1062*ae771770SStanislav Sedov#ifndef HAVE_STRVISX 1063*ae771770SStanislav Sedov#define strvisx rk_strvisx 1064*ae771770SStanislav Sedov#endif 1065*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 1066c19800e8SDoug Rabsonstrvisx(char *, const char *, size_t, int); 10678373020dSJacques Vidrine#endif 10688373020dSJacques Vidrine 10698373020dSJacques Vidrine#if !defined(HAVE_SVIS) || defined(NEED_SVIS_PROTO) 1070*ae771770SStanislav Sedov#ifndef HAVE_SVIS 1071*ae771770SStanislav Sedov#define svis rk_svis 1072*ae771770SStanislav Sedov#endif 1073*ae771770SStanislav SedovROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL 1074c19800e8SDoug Rabsonsvis(char *, int, int, int, const char *); 10758373020dSJacques Vidrine#endif 10768373020dSJacques Vidrine 10778373020dSJacques Vidrine#if !defined(HAVE_UNVIS) || defined(NEED_UNVIS_PROTO) 1078*ae771770SStanislav Sedov#ifndef HAVE_UNVIS 1079*ae771770SStanislav Sedov#define unvis rk_unvis 1080*ae771770SStanislav Sedov#endif 1081*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 1082c19800e8SDoug Rabsonunvis(char *, int, int *, int); 10838373020dSJacques Vidrine#endif 10848373020dSJacques Vidrine 10858373020dSJacques Vidrine#if !defined(HAVE_VIS) || defined(NEED_VIS_PROTO) 1086*ae771770SStanislav Sedov#ifndef HAVE_VIS 1087*ae771770SStanislav Sedov#define vis rk_vis 1088*ae771770SStanislav Sedov#endif 1089*ae771770SStanislav SedovROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL 1090c19800e8SDoug Rabsonvis(char *, int, int, int); 1091c19800e8SDoug Rabson#endif 1092c19800e8SDoug Rabson 1093c19800e8SDoug Rabson#if !defined(HAVE_CLOSEFROM) 1094*ae771770SStanislav Sedov#define closefrom rk_closefrom 1095*ae771770SStanislav SedovROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 1096c19800e8SDoug Rabsonclosefrom(int); 1097c19800e8SDoug Rabson#endif 1098c19800e8SDoug Rabson 1099c19800e8SDoug Rabson#if !defined(HAVE_TIMEGM) 1100c19800e8SDoug Rabson#define timegm rk_timegm 1101*ae771770SStanislav SedovROKEN_LIB_FUNCTION time_t ROKEN_LIB_CALL 1102c19800e8SDoug Rabsonrk_timegm(struct tm *tm); 1103c19800e8SDoug Rabson#endif 1104c19800e8SDoug Rabson 1105*ae771770SStanislav Sedov#ifdef NEED_QSORT 1106*ae771770SStanislav Sedov#define qsort rk_qsort 1107*ae771770SStanislav Sedovvoid 1108*ae771770SStanislav Sedovrk_qsort(void *, size_t, size_t, int (*)(const void *, const void *)); 1109*ae771770SStanislav Sedov#endif 1110*ae771770SStanislav Sedov 1111*ae771770SStanislav Sedov#if defined(HAVE_ARC4RANDOM) 1112*ae771770SStanislav Sedov#define rk_random() arc4random() 1113*ae771770SStanislav Sedov#elif defined(HAVE_RANDOM) 1114*ae771770SStanislav Sedov#define rk_random() random() 1115*ae771770SStanislav Sedov#else 1116*ae771770SStanislav Sedov#define rk_random() rand() 1117*ae771770SStanislav Sedov#endif 1118*ae771770SStanislav Sedov 1119*ae771770SStanislav Sedov#ifndef HAVE_TDELETE 1120*ae771770SStanislav Sedov#define tdelete(a,b,c) rk_tdelete(a,b,c) 1121*ae771770SStanislav Sedov#endif 1122*ae771770SStanislav Sedov#ifndef HAVE_TFIND 1123*ae771770SStanislav Sedov#define tfind(a,b,c) rk_tfind(a,b,c) 1124*ae771770SStanislav Sedov#endif 1125*ae771770SStanislav Sedov#ifndef HAVE_TSEARCH 1126*ae771770SStanislav Sedov#define tsearch(a,b,c) rk_tsearch(a,b,c) 1127*ae771770SStanislav Sedov#endif 1128*ae771770SStanislav Sedov#ifndef HAVE_TWALK 1129*ae771770SStanislav Sedov#define twalk(a,b) rk_twalk(a,b) 1130*ae771770SStanislav Sedov#endif 1131*ae771770SStanislav Sedov 1132*ae771770SStanislav Sedov#if defined(__linux__) && defined(SOCK_CLOEXEC) && !defined(SOCKET_WRAPPER_REPLACE) && !defined(__SOCKET_WRAPPER_H__) 1133*ae771770SStanislav Sedov#undef socket 1134*ae771770SStanislav Sedov#define socket(_fam,_type,_prot) rk_socket(_fam,_type,_prot) 1135*ae771770SStanislav Sedovint ROKEN_LIB_FUNCTION rk_socket(int, int, int); 1136*ae771770SStanislav Sedov#endif 1137*ae771770SStanislav Sedov 1138c19800e8SDoug Rabson#ifdef SOCKET_WRAPPER_REPLACE 1139c19800e8SDoug Rabson#include <socket_wrapper.h> 11408373020dSJacques Vidrine#endif 11418373020dSJacques Vidrine 11425e9cd1aeSAssar WesterlundROKEN_CPP_END 1143