155682Smarkm/* -*- C -*- */
255682Smarkm/*
3233294Sstas * Copyright (c) 1995-2005 Kungliga Tekniska H��gskolan
455682Smarkm * (Royal Institute of Technology, Stockholm, Sweden).
555682Smarkm * All rights reserved.
655682Smarkm * 
755682Smarkm * Redistribution and use in source and binary forms, with or without
855682Smarkm * modification, are permitted provided that the following conditions
955682Smarkm * are met:
1055682Smarkm * 
1155682Smarkm * 1. Redistributions of source code must retain the above copyright
1255682Smarkm *    notice, this list of conditions and the following disclaimer.
1355682Smarkm * 
1455682Smarkm * 2. Redistributions in binary form must reproduce the above copyright
1555682Smarkm *    notice, this list of conditions and the following disclaimer in the
1655682Smarkm *    documentation and/or other materials provided with the distribution.
1755682Smarkm * 
1855682Smarkm * 3. Neither the name of the Institute nor the names of its contributors
1955682Smarkm *    may be used to endorse or promote products derived from this software
2055682Smarkm *    without specific prior written permission.
2155682Smarkm * 
2255682Smarkm * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
2355682Smarkm * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2455682Smarkm * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2555682Smarkm * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
2655682Smarkm * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2755682Smarkm * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2855682Smarkm * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2955682Smarkm * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
3055682Smarkm * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3155682Smarkm * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3255682Smarkm * SUCH DAMAGE.
3355682Smarkm */
3455682Smarkm
3555682Smarkm#include <stdio.h>
3655682Smarkm#include <stdlib.h>
3755682Smarkm#include <stdarg.h>
38178825Sdfr#ifdef HAVE_STDINT_H
39178825Sdfr#include <stdint.h>
40178825Sdfr#endif
4155682Smarkm#include <string.h>
4255682Smarkm#include <signal.h>
4372445Sassar
44233294Sstas#ifndef ROKEN_LIB_FUNCTION
45233294Sstas#ifdef _WIN32
46233294Sstas#  define ROKEN_LIB_CALL     __cdecl
47233294Sstas#  ifdef ROKEN_LIB_DYNAMIC
48233294Sstas#    define ROKEN_LIB_FUNCTION __declspec(dllimport)
49233294Sstas#    define ROKEN_LIB_VARIABLE __declspec(dllimport)
50233294Sstas#  else
51233294Sstas#    define ROKEN_LIB_FUNCTION
52233294Sstas#    define ROKEN_LIB_VARIABLE
53233294Sstas#  endif
54233294Sstas#else
55233294Sstas#define ROKEN_LIB_FUNCTION
56233294Sstas#define ROKEN_LIB_CALL
57233294Sstas#define ROKEN_LIB_VARIABLE
58233294Sstas#endif
59233294Sstas#endif
60233294Sstas
61233294Sstas#ifdef HAVE_WINSOCK
62233294Sstas/* Declarations for Microsoft Windows */
63233294Sstas
64233294Sstas#include <winsock2.h>
65233294Sstas#include <ws2tcpip.h>
66233294Sstas
67233294Sstas/*
68233294Sstas * error codes for inet_ntop/inet_pton 
69233294Sstas */
70233294Sstas#define EAFNOSUPPORT WSAEAFNOSUPPORT
71233294Sstas
72233294Sstastypedef SOCKET rk_socket_t;
73233294Sstas
74233294Sstas#define rk_closesocket(x) closesocket(x)
75233294Sstas#define rk_INVALID_SOCKET INVALID_SOCKET
76233294Sstas#define rk_IS_BAD_SOCKET(s) ((s) == INVALID_SOCKET)
77233294Sstas#define rk_IS_SOCKET_ERROR(rv) ((rv) == SOCKET_ERROR)
78233294Sstas#define rk_SOCK_ERRNO WSAGetLastError()
79233294Sstas
80233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL rk_SOCK_IOCTL(SOCKET s, long cmd, int * argp);
81233294Sstas
82233294Sstas/* Microsoft VC 2010 POSIX definitions */
83233294Sstas#ifndef ENOTSOCK
84233294Sstas#define ENOTSOCK		128
85233294Sstas#endif
86233294Sstas#ifndef ENOTSUP
87233294Sstas#define ENOTSUP                 129
88233294Sstas#endif
89233294Sstas#ifndef EOVERFLOW
90233294Sstas#define EOVERFLOW               132
91233294Sstas#endif
92233294Sstas#ifndef ETIMEDOUT
93233294Sstas#define ETIMEDOUT               138
94233294Sstas#endif
95233294Sstas#ifndef EWOULDBLOCK
96233294Sstas#define EWOULDBLOCK             140
97233294Sstas#endif
98233294Sstas
99233294Sstas#define rk_SOCK_INIT() rk_WSAStartup()
100233294Sstas#define rk_SOCK_EXIT() rk_WSACleanup()
101233294Sstas
102233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL rk_WSAStartup(void);
103233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL rk_WSACleanup(void);
104233294Sstas
105233294Sstas#else  /* not WinSock */
106233294Sstas
107233294Sstastypedef int rk_socket_t;
108233294Sstas
109233294Sstas#define rk_closesocket(x) close(x)
110233294Sstas#define rk_SOCK_IOCTL(s,c,a) ioctl((s),(c),(a))
111233294Sstas#define rk_IS_BAD_SOCKET(s) ((s) < 0)
112233294Sstas#define rk_IS_SOCKET_ERROR(rv) ((rv) < 0)
113233294Sstas#define rk_SOCK_ERRNO errno
114233294Sstas#define rk_INVALID_SOCKET (-1)
115233294Sstas
116233294Sstas#define rk_SOCK_INIT() 0
117233294Sstas#define rk_SOCK_EXIT() do { } while(0)
118233294Sstas
119233294Sstas#endif
120233294Sstas
121233294Sstas#ifndef IN_LOOPBACKNET
122233294Sstas#define IN_LOOPBACKNET 127
123233294Sstas#endif
124233294Sstas
125233294Sstas#ifdef _MSC_VER
126233294Sstas/* Declarations for Microsoft Visual C runtime on Windows */
127233294Sstas
128233294Sstas#include<process.h>
129233294Sstas
130233294Sstas#include<io.h>
131233294Sstas
132233294Sstas#ifndef __BIT_TYPES_DEFINED__
133233294Sstas#define __BIT_TYPES_DEFINED__
134233294Sstas
135233294Sstastypedef __int8             int8_t;
136233294Sstastypedef __int16            int16_t;
137233294Sstastypedef __int32            int32_t;
138233294Sstastypedef __int64            int64_t;
139233294Sstastypedef unsigned __int8    uint8_t;
140233294Sstastypedef unsigned __int16   uint16_t;
141233294Sstastypedef unsigned __int32   uint32_t;
142233294Sstastypedef unsigned __int64   uint64_t;
143233294Sstastypedef uint8_t            u_int8_t;
144233294Sstastypedef uint16_t           u_int16_t;
145233294Sstastypedef uint32_t           u_int32_t;
146233294Sstastypedef uint64_t           u_int64_t;
147233294Sstas
148233294Sstas#endif  /* __BIT_TYPES_DEFINED__ */
149233294Sstas
150233294Sstas#define UNREACHABLE(x) x
151233294Sstas#define UNUSED_ARGUMENT(x) ((void) x)
152233294Sstas
153233294Sstas#define RETSIGTYPE void
154233294Sstas
155233294Sstas#define VOID_RETSIGTYPE 1
156233294Sstas
157233294Sstas#ifdef VOID_RETSIGTYPE
158233294Sstas#define SIGRETURN(x) return
159233294Sstas#else
160233294Sstas#define SIGRETURN(x) return (RETSIGTYPE)(x)
161233294Sstas#endif
162233294Sstas
163233294Sstas#ifndef CPP_ONLY
164233294Sstas
165233294Sstastypedef int pid_t;
166233294Sstas
167233294Sstastypedef unsigned int gid_t;
168233294Sstas
169233294Sstastypedef unsigned int uid_t;
170233294Sstas
171233294Sstastypedef unsigned short mode_t;
172233294Sstas
173233294Sstas#endif
174233294Sstas
175233294Sstas#ifndef __cplusplus
176233294Sstas#define inline __inline
177233294Sstas#endif
178233294Sstas
179233294Sstas#else
180233294Sstas
181233294Sstas#define UNREACHABLE(x)
182233294Sstas#define UNUSED_ARGUMENT(x)
183233294Sstas
184233294Sstas#endif
185233294Sstas
18672445Sassar#ifdef _AIX
18772445Sassarstruct ether_addr;
18872445Sassarstruct sockaddr_dl;
18972445Sassar#endif
19055682Smarkm#ifdef HAVE_SYS_PARAM_H
19155682Smarkm#include <sys/param.h>
19255682Smarkm#endif
19378527Sassar#ifdef HAVE_INTTYPES_H
19478527Sassar#include <inttypes.h>
19578527Sassar#endif
19655682Smarkm#ifdef HAVE_SYS_TYPES_H
19755682Smarkm#include <sys/types.h>
19855682Smarkm#endif
19978527Sassar#ifdef HAVE_SYS_BITYPES_H
20078527Sassar#include <sys/bitypes.h>
20178527Sassar#endif
20278527Sassar#ifdef HAVE_BIND_BITYPES_H
20378527Sassar#include <bind/bitypes.h>
20478527Sassar#endif
20578527Sassar#ifdef HAVE_NETINET_IN6_MACHTYPES_H
20678527Sassar#include <netinet/in6_machtypes.h>
20778527Sassar#endif
20855682Smarkm#ifdef HAVE_UNISTD_H
20955682Smarkm#include <unistd.h>
21055682Smarkm#endif
21155682Smarkm#ifdef HAVE_SYS_SOCKET_H
21255682Smarkm#include <sys/socket.h>
21355682Smarkm#endif
21455682Smarkm#ifdef HAVE_SYS_UIO_H
21555682Smarkm#include <sys/uio.h>
21655682Smarkm#endif
21755682Smarkm#ifdef HAVE_GRP_H
21855682Smarkm#include <grp.h>
21955682Smarkm#endif
22055682Smarkm#ifdef HAVE_SYS_STAT_H
22155682Smarkm#include <sys/stat.h>
22255682Smarkm#endif
22355682Smarkm#ifdef HAVE_NETINET_IN_H
22455682Smarkm#include <netinet/in.h>
22555682Smarkm#endif
22655682Smarkm#ifdef HAVE_NETINET_IN6_H
22755682Smarkm#include <netinet/in6.h>
22855682Smarkm#endif
22955682Smarkm#ifdef HAVE_NETINET6_IN6_H
23055682Smarkm#include <netinet6/in6.h>
23155682Smarkm#endif
23255682Smarkm#ifdef HAVE_ARPA_INET_H
23355682Smarkm#include <arpa/inet.h>
23455682Smarkm#endif
23555682Smarkm#ifdef HAVE_NETDB_H
23655682Smarkm#include <netdb.h>
23755682Smarkm#endif
23890926Snectar#ifdef HAVE_ARPA_NAMESER_H
23990926Snectar#include <arpa/nameser.h>
24090926Snectar#endif
24190926Snectar#ifdef HAVE_RESOLV_H
24290926Snectar#include <resolv.h>
24390926Snectar#endif
24455682Smarkm#ifdef HAVE_SYSLOG_H
24555682Smarkm#include <syslog.h>
24655682Smarkm#endif
24755682Smarkm#ifdef HAVE_FCNTL_H
24855682Smarkm#include <fcntl.h>
24955682Smarkm#endif
25055682Smarkm#ifdef HAVE_ERRNO_H
25155682Smarkm#include <errno.h>
25255682Smarkm#endif
25355682Smarkm#include <err.h>
25455682Smarkm#ifdef HAVE_TERMIOS_H
25555682Smarkm#include <termios.h>
25655682Smarkm#endif
257233294Sstas#ifdef HAVE_SYS_IOCTL_H
25855682Smarkm#include <sys/ioctl.h>
25955682Smarkm#endif
26055682Smarkm#ifdef TIME_WITH_SYS_TIME
26155682Smarkm#include <sys/time.h>
26255682Smarkm#include <time.h>
26355682Smarkm#elif defined(HAVE_SYS_TIME_H)
26455682Smarkm#include <sys/time.h>
26555682Smarkm#else
26655682Smarkm#include <time.h>
26755682Smarkm#endif
26855682Smarkm
26955682Smarkm#ifdef HAVE_PATHS_H
27055682Smarkm#include <paths.h>
27155682Smarkm#endif
27255682Smarkm
273233294Sstas#ifdef HAVE_DIRENT_H
274233294Sstas#include <dirent.h>
275233294Sstas#endif
276233294Sstas
277233294Sstas#ifdef BACKSLASH_PATH_DELIM
278233294Sstas#define rk_PATH_DELIM '\\'
279233294Sstas#endif
280233294Sstas
281102644Snectar#ifndef HAVE_SSIZE_T
282233294Sstas#ifndef SSIZE_T_DEFINED
283233294Sstas#ifdef ssize_t
284233294Sstas#undef ssize_t
285233294Sstas#endif
286233294Sstas#ifdef _WIN64
287233294Sstastypedef __int64 ssize_t;
288233294Sstas#else
289102644Snectartypedef int ssize_t;
290102644Snectar#endif
291233294Sstas#define SSIZE_T_DEFINED
292233294Sstas#endif  /* SSIZE_T_DEFINED */
293233294Sstas#endif  /* HAVE_SSIZE_T */
294102644Snectar
29555682Smarkm#include <roken-common.h>
29655682Smarkm
29772445SassarROKEN_CPP_START
29872445Sassar
299178825Sdfr#ifdef HAVE_UINTPTR_T
300178825Sdfr#define rk_UNCONST(x) ((void *)(uintptr_t)(const void *)(x))
301178825Sdfr#else
302178825Sdfr#define rk_UNCONST(x) ((void *)(unsigned long)(const void *)(x))
303178825Sdfr#endif
304178825Sdfr
30555682Smarkm#if !defined(HAVE_SETSID) && defined(HAVE__SETSID)
30655682Smarkm#define setsid _setsid
30755682Smarkm#endif
30855682Smarkm
309233294Sstas#ifdef _MSC_VER
310233294Sstas/* Additional macros for Visual C/C++ runtime */
311233294Sstas
312233294Sstas#define close	_close
313233294Sstas
314233294Sstas#define getpid	_getpid
315233294Sstas
316233294Sstas#define open	_open
317233294Sstas
318233294Sstas#define chdir   _chdir
319233294Sstas
320233294Sstas#define fsync   _commit
321233294Sstas
322233294Sstas/* The MSVC implementation of snprintf is not C99 compliant.  */
323233294Sstas#define snprintf    rk_snprintf
324233294Sstas#define vsnprintf   rk_vsnprintf
325233294Sstas#define vasnprintf  rk_vasnprintf
326233294Sstas#define vasprintf   rk_vasprintf
327233294Sstas#define asnprintf   rk_asnprintf
328233294Sstas#define asprintf    rk_asprintf
329233294Sstas
330233294Sstas#define _PIPE_BUFFER_SZ 8192
331233294Sstas#define pipe(fds) _pipe((fds), _PIPE_BUFFER_SZ, O_BINARY);
332233294Sstas
333233294Sstas#define ftruncate(fd, sz) _chsize((fd), (sz))
334233294Sstas
335233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
336233294Sstasrk_snprintf (char *str, size_t sz, const char *format, ...);
337233294Sstas
338233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
339233294Sstasrk_asprintf (char **ret, const char *format, ...);
340233294Sstas
341233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
342233294Sstasrk_asnprintf (char **ret, size_t max_sz, const char *format, ...);
343233294Sstas
344233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
345233294Sstasrk_vasprintf (char **ret, const char *format, va_list args);
346233294Sstas
347233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
348233294Sstasrk_vasnprintf (char **ret, size_t max_sz, const char *format, va_list args);
349233294Sstas
350233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
351233294Sstasrk_vsnprintf (char *str, size_t sz, const char *format, va_list args);
352233294Sstas
353233294Sstas/* missing stat.h predicates */
354233294Sstas
355233294Sstas#define S_ISREG(m) (((m) & _S_IFREG) == _S_IFREG)
356233294Sstas
357233294Sstas#define S_ISDIR(m) (((m) & _S_IFDIR) == _S_IFDIR)
358233294Sstas
359233294Sstas#define S_ISCHR(m) (((m) & _S_IFCHR) == _S_IFCHR)
360233294Sstas
361233294Sstas#define S_ISFIFO(m) (((m) & _S_IFIFO) == _S_IFIFO)
362233294Sstas
363233294Sstas/* The following are not implemented:
364233294Sstas
365233294Sstas S_ISLNK(m)
366233294Sstas S_ISSOCK(m)
367233294Sstas S_ISBLK(m)
368233294Sstas*/
369233294Sstas
370233294Sstas#endif  /* _MSC_VER */
371233294Sstas
372233294Sstas#ifdef HAVE_WINSOCK
373233294Sstas
374233294Sstas/* While we are at it, define WinSock specific scatter gather socket
375233294Sstas   I/O. */
376233294Sstas
377233294Sstas#define iovec    _WSABUF
378233294Sstas#define iov_base buf
379233294Sstas#define iov_len  len
380233294Sstas
381233294Sstasstruct msghdr {
382233294Sstas    void           *msg_name;
383233294Sstas    socklen_t       msg_namelen;
384233294Sstas    struct iovec   *msg_iov;
385233294Sstas    size_t          msg_iovlen;
386233294Sstas    void           *msg_control;
387233294Sstas    socklen_t       msg_controllen;
388233294Sstas    int             msg_flags;
389233294Sstas};
390233294Sstas
391233294Sstas#define sendmsg sendmsg_w32
392233294Sstas
393233294SstasROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL
394233294Sstassendmsg_w32(rk_socket_t s, const struct msghdr * msg, int flags);
395233294Sstas
396233294Sstas#endif	/* HAVE_WINSOCK */
397233294Sstas
39855682Smarkm#ifndef HAVE_PUTENV
399233294Sstas#define putenv rk_putenv
400233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL putenv(const char *);
40155682Smarkm#endif
40255682Smarkm
40355682Smarkm#if !defined(HAVE_SETENV) || defined(NEED_SETENV_PROTO)
404233294Sstas#ifndef HAVE_SETENV
405233294Sstas#define setenv rk_setenv
40655682Smarkm#endif
407233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL setenv(const char *, const char *, int);
408233294Sstas#endif
40955682Smarkm
41055682Smarkm#if !defined(HAVE_UNSETENV) || defined(NEED_UNSETENV_PROTO)
411233294Sstas#ifndef HAVE_UNSETENV
412233294Sstas#define unsetenv rk_unsetenv
41355682Smarkm#endif
414233294SstasROKEN_LIB_FUNCTION void ROKEN_LIB_CALL unsetenv(const char *);
415233294Sstas#endif
41655682Smarkm
41755682Smarkm#if !defined(HAVE_GETUSERSHELL) || defined(NEED_GETUSERSHELL_PROTO)
418233294Sstas#ifndef HAVE_GETUSERSHELL
419233294Sstas#define getusershell rk_getusershell
420233294Sstas#define endusershell rk_endusershell
42155682Smarkm#endif
422233294SstasROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL getusershell(void);
423233294SstasROKEN_LIB_FUNCTION void ROKEN_LIB_CALL endusershell(void);
424233294Sstas#endif
42555682Smarkm
42655682Smarkm#if !defined(HAVE_SNPRINTF) || defined(NEED_SNPRINTF_PROTO)
427233294Sstas#ifndef HAVE_SNPRINTF
428233294Sstas#define snprintf rk_snprintf
429233294Sstas#endif
430233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
431233294Sstas     rk_snprintf (char *, size_t, const char *, ...)
43255682Smarkm     __attribute__ ((format (printf, 3, 4)));
43355682Smarkm#endif
43455682Smarkm
43555682Smarkm#if !defined(HAVE_VSNPRINTF) || defined(NEED_VSNPRINTF_PROTO)
436233294Sstas#ifndef HAVE_VSNPRINTF
437233294Sstas#define vsnprintf rk_vsnprintf
438233294Sstas#endif
439233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL 
440233294Sstas     rk_vsnprintf (char *, size_t, const char *, va_list)
44155682Smarkm     __attribute__((format (printf, 3, 0)));
44255682Smarkm#endif
44355682Smarkm
44455682Smarkm#if !defined(HAVE_ASPRINTF) || defined(NEED_ASPRINTF_PROTO)
445233294Sstas#ifndef HAVE_ASPRINTF
446233294Sstas#define asprintf rk_asprintf
447233294Sstas#endif
448233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
449233294Sstas     rk_asprintf (char **, const char *, ...)
45055682Smarkm     __attribute__ ((format (printf, 2, 3)));
45155682Smarkm#endif
45255682Smarkm
45355682Smarkm#if !defined(HAVE_VASPRINTF) || defined(NEED_VASPRINTF_PROTO)
454233294Sstas#ifndef HAVE_VASPRINTF
455233294Sstas#define vasprintf rk_vasprintf
456233294Sstas#endif
457233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
458233294Sstas    rk_vasprintf (char **, const char *, va_list)
45955682Smarkm     __attribute__((format (printf, 2, 0)));
46055682Smarkm#endif
46155682Smarkm
46255682Smarkm#if !defined(HAVE_ASNPRINTF) || defined(NEED_ASNPRINTF_PROTO)
463233294Sstas#ifndef HAVE_ASNPRINTF
464233294Sstas#define asnprintf rk_asnprintf
465233294Sstas#endif
466233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
467233294Sstas    rk_asnprintf (char **, size_t, const char *, ...)
46855682Smarkm     __attribute__ ((format (printf, 3, 4)));
46955682Smarkm#endif
47055682Smarkm
47155682Smarkm#if !defined(HAVE_VASNPRINTF) || defined(NEED_VASNPRINTF_PROTO)
472233294Sstas#ifndef HAVE_VASNPRINTF
473233294Sstas#define vasnprintf rk_vasnprintf
474233294Sstas#endif
475233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
476178825Sdfr    vasnprintf (char **, size_t, const char *, va_list)
47755682Smarkm     __attribute__((format (printf, 3, 0)));
47855682Smarkm#endif
47955682Smarkm
48055682Smarkm#ifndef HAVE_STRDUP
481233294Sstas#define strdup rk_strdup
482233294SstasROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strdup(const char *);
48355682Smarkm#endif
48455682Smarkm
485102644Snectar#if !defined(HAVE_STRNDUP) || defined(NEED_STRNDUP_PROTO)
486233294Sstas#ifndef HAVE_STRNDUP
487233294Sstas#define strndup rk_strndup
48855682Smarkm#endif
489233294SstasROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strndup(const char *, size_t);
490233294Sstas#endif
49155682Smarkm
49255682Smarkm#ifndef HAVE_STRLWR
493233294Sstas#define strlwr rk_strlwr
494233294SstasROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strlwr(char *);
49555682Smarkm#endif
49655682Smarkm
49755682Smarkm#ifndef HAVE_STRNLEN
498233294Sstas#define strnlen rk_strnlen
499233294SstasROKEN_LIB_FUNCTION size_t ROKEN_LIB_CALL strnlen(const char*, size_t);
50055682Smarkm#endif
50155682Smarkm
50255682Smarkm#if !defined(HAVE_STRSEP) || defined(NEED_STRSEP_PROTO)
503233294Sstas#ifndef HAVE_STRSEP
504233294Sstas#define strsep rk_strsep
50555682Smarkm#endif
506233294SstasROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strsep(char**, const char*);
507233294Sstas#endif
50855682Smarkm
50972445Sassar#if !defined(HAVE_STRSEP_COPY) || defined(NEED_STRSEP_COPY_PROTO)
510233294Sstas#ifndef HAVE_STRSEP_COPY
511233294Sstas#define strsep_copy rk_strsep_copy
51272445Sassar#endif
513233294SstasROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL strsep_copy(const char**, const char*, char*, size_t);
514233294Sstas#endif
51572445Sassar
51655682Smarkm#ifndef HAVE_STRCASECMP
517233294Sstas#define strcasecmp rk_strcasecmp
518233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL strcasecmp(const char *, const char *);
51955682Smarkm#endif
52055682Smarkm
52155682Smarkm#ifdef NEED_FCLOSE_PROTO
522233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL fclose(FILE *);
52355682Smarkm#endif
52455682Smarkm
52555682Smarkm#ifdef NEED_STRTOK_R_PROTO
526233294SstasROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strtok_r(char *, const char *, char **);
52755682Smarkm#endif
52855682Smarkm
52955682Smarkm#ifndef HAVE_STRUPR
530233294Sstas#define strupr rk_strupr
531233294SstasROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strupr(char *);
53255682Smarkm#endif
53355682Smarkm
53455682Smarkm#ifndef HAVE_STRLCPY
535233294Sstas#define strlcpy rk_strlcpy
536233294SstasROKEN_LIB_FUNCTION size_t ROKEN_LIB_CALL strlcpy (char *, const char *, size_t);
53755682Smarkm#endif
53855682Smarkm
53955682Smarkm#ifndef HAVE_STRLCAT
540233294Sstas#define strlcat rk_strlcat
541233294SstasROKEN_LIB_FUNCTION size_t ROKEN_LIB_CALL strlcat (char *, const char *, size_t);
54255682Smarkm#endif
54355682Smarkm
54455682Smarkm#ifndef HAVE_GETDTABLESIZE
545233294Sstas#define getdtablesize rk_getdtablesize
546233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL getdtablesize(void);
54755682Smarkm#endif
54855682Smarkm
54955682Smarkm#if !defined(HAVE_STRERROR) && !defined(strerror)
550233294Sstas#define strerror rk_strerror
551233294SstasROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strerror(int);
55255682Smarkm#endif
55355682Smarkm
554233294Sstas#if (!defined(HAVE_STRERROR_R) && !defined(strerror_r)) || (!defined(STRERROR_R_PROTO_COMPATIBLE) && defined(HAVE_STRERROR_R))
555233294Sstasint ROKEN_LIB_FUNCTION rk_strerror_r(int, char *, size_t);
556233294Sstas#else
557233294Sstas#define rk_strerror_r strerror_r
558233294Sstas#endif
559233294Sstas
56055682Smarkm#if !defined(HAVE_HSTRERROR) || defined(NEED_HSTRERROR_PROTO)
561233294Sstas#ifndef HAVE_HSTRERROR
562233294Sstas#define hstrerror rk_hstrerror
563233294Sstas#endif
56455682Smarkm/* This causes a fatal error under Psoriasis */
565233294Sstas#ifndef SunOS
566233294SstasROKEN_LIB_FUNCTION const char * ROKEN_LIB_CALL hstrerror(int);
56755682Smarkm#endif
56855682Smarkm#endif
56955682Smarkm
570178825Sdfr#if !HAVE_DECL_H_ERRNO
57155682Smarkmextern int h_errno;
57255682Smarkm#endif
57355682Smarkm
57455682Smarkm#if !defined(HAVE_INET_ATON) || defined(NEED_INET_ATON_PROTO)
575233294Sstas#ifndef HAVE_INET_ATON
576233294Sstas#define inet_aton rk_inet_aton
57755682Smarkm#endif
578233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL inet_aton(const char *, struct in_addr *);
579233294Sstas#endif
58055682Smarkm
58155682Smarkm#ifndef HAVE_INET_NTOP
582233294Sstas#define inet_ntop rk_inet_ntop
583233294SstasROKEN_LIB_FUNCTION const char * ROKEN_LIB_CALL
58455682Smarkminet_ntop(int af, const void *src, char *dst, size_t size);
58555682Smarkm#endif
58655682Smarkm
58755682Smarkm#ifndef HAVE_INET_PTON
588233294Sstas#define inet_pton rk_inet_pton
589233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
590178825Sdfrinet_pton(int, const char *, void *);
59155682Smarkm#endif
59255682Smarkm
593233294Sstas#ifndef HAVE_GETCWD
594233294Sstas#define getcwd rk_getcwd
595233294SstasROKEN_LIB_FUNCTION char* ROKEN_LIB_CALL getcwd(char *, size_t);
59655682Smarkm#endif
59755682Smarkm
59855682Smarkm#ifdef HAVE_PWD_H
59955682Smarkm#include <pwd.h>
600233294SstasROKEN_LIB_FUNCTION struct passwd * ROKEN_LIB_CALL k_getpwnam (const char *);
601233294SstasROKEN_LIB_FUNCTION struct passwd * ROKEN_LIB_CALL k_getpwuid (uid_t);
60255682Smarkm#endif
60355682Smarkm
604233294SstasROKEN_LIB_FUNCTION const char * ROKEN_LIB_CALL get_default_username (void);
60555682Smarkm
60655682Smarkm#ifndef HAVE_SETEUID
607233294Sstas#define seteuid rk_seteuid
608233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL seteuid(uid_t);
60955682Smarkm#endif
61055682Smarkm
61155682Smarkm#ifndef HAVE_SETEGID
612233294Sstas#define setegid rk_setegid
613233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL setegid(gid_t);
61455682Smarkm#endif
61555682Smarkm
61655682Smarkm#ifndef HAVE_LSTAT
617233294Sstas#define lstat rk_lstat
618233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL lstat(const char *, struct stat *);
61955682Smarkm#endif
62055682Smarkm
62155682Smarkm#if !defined(HAVE_MKSTEMP) || defined(NEED_MKSTEMP_PROTO)
622233294Sstas#ifndef HAVE_MKSTEMP
623233294Sstas#define mkstemp rk_mkstemp
62455682Smarkm#endif
625233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL mkstemp(char *);
626233294Sstas#endif
62755682Smarkm
62855682Smarkm#ifndef HAVE_CGETENT
629233294Sstas#define cgetent rk_cgetent
630233294Sstas#define cgetstr rk_cgetstr
631233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL cgetent(char **, char **, const char *);
632233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL cgetstr(char *, const char *, char **);
63355682Smarkm#endif
63455682Smarkm
63555682Smarkm#ifndef HAVE_INITGROUPS
636233294Sstas#define initgroups rk_initgroups
637233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL initgroups(const char *, gid_t);
63855682Smarkm#endif
63955682Smarkm
64055682Smarkm#ifndef HAVE_FCHOWN
641233294Sstas#define fchown rk_fchown
642233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL fchown(int, uid_t, gid_t);
64355682Smarkm#endif
64455682Smarkm
645233294Sstas#ifdef RENAME_DOES_NOT_UNLINK
646233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL rk_rename(const char *, const char *);
647233294Sstas#else
648233294Sstas#define rk_rename(__rk_rn_from,__rk_rn_to) rename(__rk_rn_from,__rk_rn_to)
64955682Smarkm#endif
65055682Smarkm
651233294Sstas#if !defined(HAVE_DAEMON) || defined(NEED_DAEMON_PROTO)
652233294Sstas#ifndef HAVE_DAEMON
653233294Sstas#define daemon rk_daemon
65455682Smarkm#endif
655233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL daemon(int, int);
656233294Sstas#endif
65755682Smarkm
65855682Smarkm#ifndef HAVE_CHOWN
659233294Sstas#define chown rk_chown
660233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL chown(const char *, uid_t, gid_t);
66155682Smarkm#endif
66255682Smarkm
66355682Smarkm#ifndef HAVE_RCMD
664233294Sstas#define rcmd rk_rcmd
665233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
666178825Sdfr    rcmd(char **, unsigned short, const char *,
667178825Sdfr	 const char *, const char *, int *);
66855682Smarkm#endif
66955682Smarkm
67055682Smarkm#if !defined(HAVE_INNETGR) || defined(NEED_INNETGR_PROTO)
671233294Sstas#ifndef HAVE_INNETGR
672233294Sstas#define innetgr rk_innetgr
673233294Sstas#endif
674233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL innetgr(const char*, const char*,
675178825Sdfr    const char*, const char*);
67655682Smarkm#endif
67755682Smarkm
67855682Smarkm#ifndef HAVE_IRUSEROK
679233294Sstas#define iruserok rk_iruserok
680233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL iruserok(unsigned, int, 
681178825Sdfr    const char *, const char *);
68255682Smarkm#endif
68355682Smarkm
68455682Smarkm#if !defined(HAVE_GETHOSTNAME) || defined(NEED_GETHOSTNAME_PROTO)
685233294Sstas#ifndef HAVE_GETHOSTNAME
686233294Sstas#define gethostname rk_gethostname
68755682Smarkm#endif
688233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL gethostname(char *, int);
689233294Sstas#endif
69055682Smarkm
69155682Smarkm#ifndef HAVE_WRITEV
692233294Sstas#define writev rk_writev
693233294SstasROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL
694178825Sdfrwritev(int, const struct iovec *, int);
69555682Smarkm#endif
69655682Smarkm
69755682Smarkm#ifndef HAVE_READV
698233294Sstas#define readv rk_readv
699233294SstasROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL
700178825Sdfrreadv(int, const struct iovec *, int);
70155682Smarkm#endif
70255682Smarkm
70372445Sassar#ifndef HAVE_PIDFILE
704233294Sstas#ifdef NO_PIDFILES
705233294Sstas#define pidfile(x) ((void) 0)
706233294Sstas#else
707233294Sstas#define pidfile rk_pidfile
708233294SstasROKEN_LIB_FUNCTION void ROKEN_LIB_CALL pidfile (const char*);
70972445Sassar#endif
710233294Sstas#endif
71172445Sassar
71278527Sassar#ifndef HAVE_BSWAP32
713233294Sstas#define bswap32 rk_bswap32
714233294SstasROKEN_LIB_FUNCTION unsigned int ROKEN_LIB_CALL bswap32(unsigned int);
71578527Sassar#endif
71678527Sassar
71778527Sassar#ifndef HAVE_BSWAP16
718233294Sstas#define bswap16 rk_bswap16
719233294SstasROKEN_LIB_FUNCTION unsigned short ROKEN_LIB_CALL bswap16(unsigned short);
72078527Sassar#endif
72178527Sassar
72255682Smarkm#ifndef HAVE_FLOCK
72355682Smarkm#ifndef LOCK_SH
72455682Smarkm#define LOCK_SH   1		/* Shared lock */
72555682Smarkm#endif
72655682Smarkm#ifndef	LOCK_EX
72755682Smarkm#define LOCK_EX   2		/* Exclusive lock */
72855682Smarkm#endif
72955682Smarkm#ifndef LOCK_NB
73055682Smarkm#define LOCK_NB   4		/* Don't block when locking */
73155682Smarkm#endif
73255682Smarkm#ifndef LOCK_UN
73355682Smarkm#define LOCK_UN   8		/* Unlock */
73455682Smarkm#endif
73555682Smarkm
736233294Sstas#define flock(_x,_y) rk_flock(_x,_y)
737233294Sstasint rk_flock(int fd, int operation);
73855682Smarkm#endif /* HAVE_FLOCK */
73955682Smarkm
740233294Sstas#ifndef HAVE_DIRFD
741233294Sstas#ifdef HAVE_DIR_DD_FD
742233294Sstas#define dirfd(x) ((x)->dd_fd)
743233294Sstas#else
744233294Sstas#ifndef _WIN32 /* Windows code never calls dirfd */
745233294Sstas#error Missing dirfd() and ->dd_fd
746233294Sstas#endif
747233294Sstas#endif
748233294Sstas#endif
74955682Smarkm
750233294SstasROKEN_LIB_FUNCTION time_t ROKEN_LIB_CALL tm2time (struct tm, int);
75155682Smarkm
752233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL unix_verify_user(char *, char *);
75355682Smarkm
754233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL roken_concat (char *, size_t, ...);
75555682Smarkm
756233294SstasROKEN_LIB_FUNCTION size_t ROKEN_LIB_CALL roken_mconcat (char **, size_t, ...);
75755682Smarkm
758233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL roken_vconcat (char *, size_t, va_list);
759233294Sstas
760233294SstasROKEN_LIB_FUNCTION size_t ROKEN_LIB_CALL
761178825Sdfr    roken_vmconcat (char **, size_t, va_list);
76255682Smarkm
763233294SstasROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL
764233294Sstas    net_write (rk_socket_t, const void *, size_t);
76555682Smarkm
766233294SstasROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL
767233294Sstas    net_read (rk_socket_t, void *, size_t);
76855682Smarkm
769233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
770233294Sstas    issuid(void);
77155682Smarkm
77255682Smarkm#ifndef HAVE_STRUCT_WINSIZE
77355682Smarkmstruct winsize {
77455682Smarkm	unsigned short ws_row, ws_col;
77555682Smarkm	unsigned short ws_xpixel, ws_ypixel;
77655682Smarkm};
77755682Smarkm#endif
77855682Smarkm
779233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL get_window_size(int fd, int *, int *);
78055682Smarkm
78155682Smarkm#ifndef HAVE_VSYSLOG
782233294Sstas#define vsyslog rk_vsyslog
783233294SstasROKEN_LIB_FUNCTION void ROKEN_LIB_CALL vsyslog(int, const char *, va_list);
78455682Smarkm#endif
78555682Smarkm
786233294Sstas#ifndef HAVE_GETOPT
787233294Sstas#define getopt rk_getopt
788233294Sstas#define optarg rk_optarg
789233294Sstas#define optind rk_optind
790233294Sstas#define opterr rk_opterr
791233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
792233294Sstasgetopt(int nargc, char * const *nargv, const char *ostr);
793233294Sstas#endif
794233294Sstas
795178825Sdfr#if !HAVE_DECL_OPTARG
796233294SstasROKEN_LIB_VARIABLE extern char *optarg;
79755682Smarkm#endif
798178825Sdfr#if !HAVE_DECL_OPTIND
799233294SstasROKEN_LIB_VARIABLE extern int optind;
80055682Smarkm#endif
801178825Sdfr#if !HAVE_DECL_OPTERR
802233294SstasROKEN_LIB_VARIABLE extern int opterr;
80355682Smarkm#endif
80455682Smarkm
80555682Smarkm#ifndef HAVE_GETIPNODEBYNAME
806233294Sstas#define getipnodebyname rk_getipnodebyname
807233294SstasROKEN_LIB_FUNCTION struct hostent * ROKEN_LIB_CALL
808178825Sdfrgetipnodebyname (const char *, int, int, int *);
80955682Smarkm#endif
81055682Smarkm
81155682Smarkm#ifndef HAVE_GETIPNODEBYADDR
812233294Sstas#define getipnodebyaddr rk_getipnodebyaddr
813233294SstasROKEN_LIB_FUNCTION struct hostent * ROKEN_LIB_CALL
814178825Sdfrgetipnodebyaddr (const void *, size_t, int, int *);
81555682Smarkm#endif
81655682Smarkm
81755682Smarkm#ifndef HAVE_FREEHOSTENT
818233294Sstas#define freehostent rk_freehostent
819233294SstasROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
820178825Sdfrfreehostent (struct hostent *);
82155682Smarkm#endif
82255682Smarkm
82355682Smarkm#ifndef HAVE_COPYHOSTENT
824233294Sstas#define copyhostent rk_copyhostent
825233294SstasROKEN_LIB_FUNCTION struct hostent * ROKEN_LIB_CALL
826178825Sdfrcopyhostent (const struct hostent *);
82755682Smarkm#endif
82855682Smarkm
82955682Smarkm#ifndef HAVE_SOCKLEN_T
83055682Smarkmtypedef int socklen_t;
83155682Smarkm#endif
83255682Smarkm
83355682Smarkm#ifndef HAVE_STRUCT_SOCKADDR_STORAGE
83455682Smarkm
83555682Smarkm#ifndef HAVE_SA_FAMILY_T
83655682Smarkmtypedef unsigned short sa_family_t;
83755682Smarkm#endif
83855682Smarkm
83955682Smarkm#ifdef HAVE_IPV6
84055682Smarkm#define _SS_MAXSIZE sizeof(struct sockaddr_in6)
84155682Smarkm#else
84255682Smarkm#define _SS_MAXSIZE sizeof(struct sockaddr_in)
84355682Smarkm#endif
84455682Smarkm
84555682Smarkm#define _SS_ALIGNSIZE	sizeof(unsigned long)
84655682Smarkm
84755682Smarkm#if HAVE_STRUCT_SOCKADDR_SA_LEN
84855682Smarkm
84955682Smarkmtypedef unsigned char roken_sa_family_t;
85055682Smarkm
85172445Sassar#define _SS_PAD1SIZE   ((2 * _SS_ALIGNSIZE - sizeof (roken_sa_family_t) - sizeof(unsigned char)) % _SS_ALIGNSIZE)
85255682Smarkm#define _SS_PAD2SIZE   (_SS_MAXSIZE - (sizeof (roken_sa_family_t) + sizeof(unsigned char) + _SS_PAD1SIZE + _SS_ALIGNSIZE))
85355682Smarkm
85455682Smarkmstruct sockaddr_storage {
85555682Smarkm    unsigned char	ss_len;
85655682Smarkm    roken_sa_family_t	ss_family;
85755682Smarkm    char		__ss_pad1[_SS_PAD1SIZE];
85855682Smarkm    unsigned long	__ss_align[_SS_PAD2SIZE / sizeof(unsigned long) + 1];
85955682Smarkm};
86055682Smarkm
86155682Smarkm#else /* !HAVE_STRUCT_SOCKADDR_SA_LEN */
86255682Smarkm
86355682Smarkmtypedef unsigned short roken_sa_family_t;
86455682Smarkm
86572445Sassar#define _SS_PAD1SIZE   ((2 * _SS_ALIGNSIZE - sizeof (roken_sa_family_t)) % _SS_ALIGNSIZE)
86655682Smarkm#define _SS_PAD2SIZE   (_SS_MAXSIZE - (sizeof (roken_sa_family_t) + _SS_PAD1SIZE + _SS_ALIGNSIZE))
86755682Smarkm
86855682Smarkmstruct sockaddr_storage {
86955682Smarkm    roken_sa_family_t	ss_family;
87055682Smarkm    char		__ss_pad1[_SS_PAD1SIZE];
87155682Smarkm    unsigned long	__ss_align[_SS_PAD2SIZE / sizeof(unsigned long) + 1];
87255682Smarkm};
87355682Smarkm
87455682Smarkm#endif /* HAVE_STRUCT_SOCKADDR_SA_LEN */
87555682Smarkm
87655682Smarkm#endif /* HAVE_STRUCT_SOCKADDR_STORAGE */
87755682Smarkm
87855682Smarkm#ifndef HAVE_STRUCT_ADDRINFO
87955682Smarkmstruct addrinfo {
88055682Smarkm    int    ai_flags;
88155682Smarkm    int    ai_family;
88255682Smarkm    int    ai_socktype;
88355682Smarkm    int    ai_protocol;
88455682Smarkm    size_t ai_addrlen;
88555682Smarkm    char  *ai_canonname;
88655682Smarkm    struct sockaddr *ai_addr;
88755682Smarkm    struct addrinfo *ai_next;
88855682Smarkm};
88955682Smarkm#endif
89055682Smarkm
89155682Smarkm#ifndef HAVE_GETADDRINFO
892233294Sstas#define getaddrinfo rk_getaddrinfo
893233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
894178825Sdfrgetaddrinfo(const char *,
895178825Sdfr	    const char *,
896178825Sdfr	    const struct addrinfo *,
897178825Sdfr	    struct addrinfo **);
89855682Smarkm#endif
89955682Smarkm
90055682Smarkm#ifndef HAVE_GETNAMEINFO
901233294Sstas#define getnameinfo rk_getnameinfo
902233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
903178825Sdfrgetnameinfo(const struct sockaddr *, socklen_t,
904178825Sdfr		char *, size_t,
905178825Sdfr		char *, size_t,
906178825Sdfr		int);
90755682Smarkm#endif
90855682Smarkm
90955682Smarkm#ifndef HAVE_FREEADDRINFO
910233294Sstas#define freeaddrinfo rk_freeaddrinfo
911233294SstasROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
912178825Sdfrfreeaddrinfo(struct addrinfo *);
91355682Smarkm#endif
91455682Smarkm
91555682Smarkm#ifndef HAVE_GAI_STRERROR
916233294Sstas#define gai_strerror rk_gai_strerror
917233294SstasROKEN_LIB_FUNCTION const char * ROKEN_LIB_CALL
918178825Sdfrgai_strerror(int);
91955682Smarkm#endif
92055682Smarkm
921233294Sstas#ifdef NO_SLEEP
922233294Sstas
923233294SstasROKEN_LIB_FUNCTION unsigned int ROKEN_LIB_CALL
924233294Sstassleep(unsigned int seconds);
925233294Sstas
926233294Sstas#endif
927233294Sstas
928233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
929178825Sdfrgetnameinfo_verified(const struct sockaddr *, socklen_t,
930178825Sdfr		     char *, size_t,
931178825Sdfr		     char *, size_t,
932178825Sdfr		     int);
93355682Smarkm
934233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
935178825Sdfrroken_getaddrinfo_hostspec(const char *, int, struct addrinfo **); 
936233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
937178825Sdfrroken_getaddrinfo_hostspec2(const char *, int, int, struct addrinfo **);
93857419Smarkm
93955682Smarkm#ifndef HAVE_STRFTIME
940233294Sstas#define strftime rk_strftime
941233294SstasROKEN_LIB_FUNCTION size_t ROKEN_LIB_CALL
942178825Sdfrstrftime (char *, size_t, const char *, const struct tm *);
94355682Smarkm#endif
94455682Smarkm
94555682Smarkm#ifndef HAVE_STRPTIME
946233294Sstas#define strptime rk_strptime
947233294SstasROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL
948178825Sdfrstrptime (const char *, const char *, struct tm *);
94955682Smarkm#endif
95055682Smarkm
951233294Sstas#ifndef HAVE_GETTIMEOFDAY
952233294Sstas#define gettimeofday rk_gettimeofday
953233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
954233294Sstasgettimeofday (struct timeval *, void *);
955233294Sstas#endif
956233294Sstas
95790926Snectar#ifndef HAVE_EMALLOC
958233294Sstas#define emalloc rk_emalloc
959233294SstasROKEN_LIB_FUNCTION void * ROKEN_LIB_CALL emalloc (size_t);
96090926Snectar#endif
96190926Snectar#ifndef HAVE_ECALLOC
962233294Sstas#define ecalloc rk_ecalloc
963233294SstasROKEN_LIB_FUNCTION void * ROKEN_LIB_CALL ecalloc(size_t, size_t);
96490926Snectar#endif
96590926Snectar#ifndef HAVE_EREALLOC
966233294Sstas#define erealloc rk_erealloc
967233294SstasROKEN_LIB_FUNCTION void * ROKEN_LIB_CALL erealloc (void *, size_t);
96890926Snectar#endif
96990926Snectar#ifndef HAVE_ESTRDUP
970233294Sstas#define estrdup rk_estrdup
971233294SstasROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL estrdup (const char *);
97290926Snectar#endif
97390926Snectar
97455682Smarkm/*
97555682Smarkm * kludges and such
97655682Smarkm */
97755682Smarkm
978233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
979178825Sdfrroken_gethostby_setup(const char*, const char*);
980233294SstasROKEN_LIB_FUNCTION struct hostent* ROKEN_LIB_CALL
981178825Sdfrroken_gethostbyname(const char*);
982233294SstasROKEN_LIB_FUNCTION struct hostent* ROKEN_LIB_CALL 
983178825Sdfrroken_gethostbyaddr(const void*, size_t, int);
98455682Smarkm
98555682Smarkm#ifdef GETSERVBYNAME_PROTO_COMPATIBLE
98655682Smarkm#define roken_getservbyname(x,y) getservbyname(x,y)
98755682Smarkm#else
98855682Smarkm#define roken_getservbyname(x,y) getservbyname((char *)x, (char *)y)
98955682Smarkm#endif
99055682Smarkm
99155682Smarkm#ifdef OPENLOG_PROTO_COMPATIBLE
99255682Smarkm#define roken_openlog(a,b,c) openlog(a,b,c)
99355682Smarkm#else
99455682Smarkm#define roken_openlog(a,b,c) openlog((char *)a,b,c)
99555682Smarkm#endif
99655682Smarkm
99772445Sassar#ifdef GETSOCKNAME_PROTO_COMPATIBLE
99872445Sassar#define roken_getsockname(a,b,c) getsockname(a,b,c)
99972445Sassar#else
100072445Sassar#define roken_getsockname(a,b,c) getsockname(a, b, (void*)c)
100172445Sassar#endif
100272445Sassar
100378527Sassar#ifndef HAVE_SETPROGNAME
1004233294Sstas#define setprogname rk_setprogname
1005233294SstasROKEN_LIB_FUNCTION void ROKEN_LIB_CALL setprogname(const char *);
100678527Sassar#endif
100778527Sassar
100878527Sassar#ifndef HAVE_GETPROGNAME
1009233294Sstas#define getprogname rk_getprogname
1010233294SstasROKEN_LIB_FUNCTION const char * ROKEN_LIB_CALL getprogname(void);
101178527Sassar#endif
101278527Sassar
1013178825Sdfr#if !defined(HAVE_SETPROGNAME) && !defined(HAVE_GETPROGNAME) && !HAVE_DECL___PROGNAME
1014178825Sdfrextern const char *__progname;
1015178825Sdfr#endif
1016102644Snectar
1017233294SstasROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
1018233294Sstasmini_inetd_addrinfo (struct addrinfo*, rk_socket_t *);
101955682Smarkm
1020233294SstasROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
1021233294Sstasmini_inetd (int, rk_socket_t *);
1022233294Sstas
102390926Snectar#ifndef HAVE_LOCALTIME_R
1024233294Sstas#define localtime_r rk_localtime_r
1025233294SstasROKEN_LIB_FUNCTION struct tm * ROKEN_LIB_CALL
1026178825Sdfrlocaltime_r(const time_t *, struct tm *);
102790926Snectar#endif
102890926Snectar
1029102644Snectar#if !defined(HAVE_STRSVIS) || defined(NEED_STRSVIS_PROTO)
1030233294Sstas#ifndef HAVE_STRSVIS
1031233294Sstas#define strsvis rk_strsvis
1032233294Sstas#endif
1033233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
1034178825Sdfrstrsvis(char *, const char *, int, const char *);
1035102644Snectar#endif
1036102644Snectar
1037233294Sstas#if !defined(HAVE_STRSVISX) || defined(NEED_STRSVISX_PROTO)
1038233294Sstas#ifndef HAVE_STRSVISX
1039233294Sstas#define strsvisx rk_strsvisx
1040233294Sstas#endif
1041233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
1042233294Sstasstrsvisx(char *, const char *, size_t, int, const char *);
1043233294Sstas#endif
1044233294Sstas
1045102644Snectar#if !defined(HAVE_STRUNVIS) || defined(NEED_STRUNVIS_PROTO)
1046233294Sstas#ifndef HAVE_STRUNVIS
1047233294Sstas#define strunvis rk_strunvis
1048233294Sstas#endif
1049233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
1050178825Sdfrstrunvis(char *, const char *);
1051102644Snectar#endif
1052102644Snectar
1053102644Snectar#if !defined(HAVE_STRVIS) || defined(NEED_STRVIS_PROTO)
1054233294Sstas#ifndef HAVE_STRVIS
1055233294Sstas#define strvis rk_strvis
1056233294Sstas#endif
1057233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
1058178825Sdfrstrvis(char *, const char *, int);
1059102644Snectar#endif
1060102644Snectar
1061102644Snectar#if !defined(HAVE_STRVISX) || defined(NEED_STRVISX_PROTO)
1062233294Sstas#ifndef HAVE_STRVISX
1063233294Sstas#define strvisx rk_strvisx
1064233294Sstas#endif
1065233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
1066178825Sdfrstrvisx(char *, const char *, size_t, int);
1067102644Snectar#endif
1068102644Snectar
1069102644Snectar#if !defined(HAVE_SVIS) || defined(NEED_SVIS_PROTO)
1070233294Sstas#ifndef HAVE_SVIS
1071233294Sstas#define svis rk_svis
1072233294Sstas#endif
1073233294SstasROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL
1074178825Sdfrsvis(char *, int, int, int, const char *);
1075102644Snectar#endif
1076102644Snectar
1077102644Snectar#if !defined(HAVE_UNVIS) || defined(NEED_UNVIS_PROTO)
1078233294Sstas#ifndef HAVE_UNVIS
1079233294Sstas#define unvis rk_unvis
1080233294Sstas#endif
1081233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
1082178825Sdfrunvis(char *, int, int *, int);
1083102644Snectar#endif
1084102644Snectar
1085102644Snectar#if !defined(HAVE_VIS) || defined(NEED_VIS_PROTO)
1086233294Sstas#ifndef HAVE_VIS
1087233294Sstas#define vis rk_vis
1088233294Sstas#endif
1089233294SstasROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL
1090178825Sdfrvis(char *, int, int, int);
1091102644Snectar#endif
1092102644Snectar
1093178825Sdfr#if !defined(HAVE_CLOSEFROM)
1094233294Sstas#define closefrom rk_closefrom
1095233294SstasROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
1096178825Sdfrclosefrom(int);
1097178825Sdfr#endif
1098178825Sdfr
1099178825Sdfr#if !defined(HAVE_TIMEGM)
1100178825Sdfr#define timegm rk_timegm
1101233294SstasROKEN_LIB_FUNCTION time_t ROKEN_LIB_CALL
1102178825Sdfrrk_timegm(struct tm *tm);
1103178825Sdfr#endif
1104178825Sdfr
1105233294Sstas#ifdef NEED_QSORT
1106233294Sstas#define qsort rk_qsort
1107233294Sstasvoid
1108233294Sstasrk_qsort(void *, size_t, size_t, int (*)(const void *, const void *));
1109233294Sstas#endif
1110233294Sstas
1111233294Sstas#if defined(HAVE_ARC4RANDOM)
1112233294Sstas#define rk_random() arc4random()
1113233294Sstas#elif defined(HAVE_RANDOM)
1114233294Sstas#define rk_random() random()
1115233294Sstas#else
1116233294Sstas#define rk_random() rand()
1117233294Sstas#endif
1118233294Sstas
1119233294Sstas#ifndef HAVE_TDELETE
1120233294Sstas#define tdelete(a,b,c) rk_tdelete(a,b,c)
1121233294Sstas#endif
1122233294Sstas#ifndef HAVE_TFIND
1123233294Sstas#define tfind(a,b,c) rk_tfind(a,b,c)
1124233294Sstas#endif
1125233294Sstas#ifndef HAVE_TSEARCH
1126233294Sstas#define tsearch(a,b,c) rk_tsearch(a,b,c)
1127233294Sstas#endif
1128233294Sstas#ifndef HAVE_TWALK
1129233294Sstas#define twalk(a,b) rk_twalk(a,b)
1130233294Sstas#endif
1131233294Sstas
1132233294Sstas#if defined(__linux__) && defined(SOCK_CLOEXEC) && !defined(SOCKET_WRAPPER_REPLACE) && !defined(__SOCKET_WRAPPER_H__)
1133233294Sstas#undef socket
1134233294Sstas#define socket(_fam,_type,_prot) rk_socket(_fam,_type,_prot)
1135233294Sstasint ROKEN_LIB_FUNCTION rk_socket(int, int, int);
1136233294Sstas#endif
1137233294Sstas
1138178825Sdfr#ifdef SOCKET_WRAPPER_REPLACE
1139178825Sdfr#include <socket_wrapper.h>
1140178825Sdfr#endif
1141178825Sdfr
114272445SassarROKEN_CPP_END
1143