LCOV - code coverage report
Current view: top level - third_party/heimdal/lib/roken - roken.h.in (source / functions) Hit Total Coverage
Test: coverage report for master 2f515e9b Lines: 2 2 100.0 %
Date: 2024-04-21 15:09:00 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /* -*- C -*- */
       2             : /*
       3             :  * Copyright (c) 1995-2017 Kungliga Tekniska Högskolan
       4             :  * (Royal Institute of Technology, Stockholm, Sweden).
       5             :  * All rights reserved.
       6             :  *
       7             :  * Redistribution and use in source and binary forms, with or without
       8             :  * modification, are permitted provided that the following conditions
       9             :  * are met:
      10             :  *
      11             :  * 1. Redistributions of source code must retain the above copyright
      12             :  *    notice, this list of conditions and the following disclaimer.
      13             :  *
      14             :  * 2. Redistributions in binary form must reproduce the above copyright
      15             :  *    notice, this list of conditions and the following disclaimer in the
      16             :  *    documentation and/or other materials provided with the distribution.
      17             :  *
      18             :  * 3. Neither the name of the Institute nor the names of its contributors
      19             :  *    may be used to endorse or promote products derived from this software
      20             :  *    without specific prior written permission.
      21             :  *
      22             :  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
      23             :  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      24             :  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
      25             :  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
      26             :  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
      27             :  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
      28             :  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
      29             :  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
      30             :  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
      31             :  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
      32             :  * SUCH DAMAGE.
      33             :  */
      34             : 
      35             : # if defined(_WIN32) && _MSC_VER >= 1400
      36             : /* _CRT_RAND_S must be defined before including stdlib.h */
      37             : #  define _CRT_RAND_S
      38             : #  define HAVE_WIN32_RAND_S 1
      39             : # endif
      40             : 
      41             : #include <stdio.h>
      42             : #include <stdlib.h>
      43             : #include <stdarg.h>
      44             : #ifdef HAVE_STDINT_H
      45             : #include <stdint.h>
      46             : #endif
      47             : #include <string.h>
      48             : #include <limits.h>
      49             : #include <signal.h>
      50             : 
      51             : #ifdef HAVE_UTIL_H
      52             : #include <util.h>
      53             : #endif
      54             : 
      55             : # ifndef ROKEN_LIB_FUNCTION
      56             : #  ifdef _WIN32
      57             : #   ifdef ROKEN_LIB_DYNAMIC
      58             : #    define ROKEN_LIB_FUNCTION __declspec(dllimport)
      59             : #   else
      60             : #    define ROKEN_LIB_FUNCTION
      61             : #   endif
      62             : #  else
      63             : #   define ROKEN_LIB_FUNCTION
      64             : #  endif
      65             : # endif
      66             : 
      67             : # ifndef ROKEN_LIB_NORETURN_FUNCTION
      68             : #  ifdef _WIN32
      69             : #   ifdef ROKEN_LIB_DYNAMIC
      70             : #    define ROKEN_LIB_NORETURN_FUNCTION __declspec(dllimport noreturn)
      71             : #   else
      72             : #    define ROKEN_LIB_NORETURN_FUNCTION __declspec(noreturn)
      73             : #   endif
      74             : #  else
      75             : #   define ROKEN_LIB_NORETURN_FUNCTION
      76             : #  endif
      77             : # endif
      78             : 
      79             : # ifndef ROKEN_LIB_CALL
      80             : #  ifdef _WIN32
      81             : #   define ROKEN_LIB_CALL     __cdecl
      82             : #  else
      83             : #   define ROKEN_LIB_CALL
      84             : #  endif
      85             : # endif
      86             : 
      87             : # ifndef ROKEN_LIB_VARIABLE
      88             : #  ifdef _WIN32
      89             : #   ifdef ROKEN_LIB_DYNAMIC
      90             : #    define ROKEN_LIB_VARIABLE __declspec(dllimport)
      91             : #   else
      92             : #    define ROKEN_LIB_VARIABLE
      93             : #   endif
      94             : #  else
      95             : #   define ROKEN_LIB_VARIABLE
      96             : #  endif
      97             : # endif
      98             : 
      99             : #if !defined(__has_extension)
     100             : #define __has_extension(x) 0
     101             : #endif
     102             : 
     103             : #ifndef ROKEN_REQUIRE_GNUC
     104             : #define ROKEN_REQUIRE_GNUC(m,n,p) \
     105             :     (((__GNUC__ * 10000) + (__GNUC_MINOR__ * 100) + __GNUC_PATCHLEVEL__) >= \
     106             :      (((m) * 10000) + ((n) * 100) + (p)))
     107             : #endif
     108             : 
     109             : #ifndef ROKEN_DEPRECATED
     110             : #if __has_extension(deprecated) || ROKEN_REQUIRE_GNUC(3,1,0)
     111             : #define ROKEN_DEPRECATED __attribute__ ((__deprecated__))
     112             : #elif defined(_MSC_VER) && (_MSC_VER>1200)
     113             : #define ROKEN_DEPRECATED __declspec(deprecated)
     114             : #else
     115             : #define ROKEN_DEPRECATED
     116             : #endif
     117             : #endif
     118             : 
     119             : #ifndef ROKEN_PRINTF_ATTRIBUTE
     120             : #if __has_extension(format) || ROKEN_REQUIRE_GNUC(3,1,0)
     121             : #define ROKEN_PRINTF_ATTRIBUTE(x) __attribute__ ((__format__ x))
     122             : #else
     123             : #define ROKEN_PRINTF_ATTRIBUTE(x)
     124             : #endif
     125             : #endif
     126             : 
     127             : #ifndef ROKEN_NORETURN_ATTRIBUTE
     128             : #if __has_extension(noreturn) || ROKEN_REQUIRE_GNUC(3,1,0)
     129             : #define ROKEN_NORETURN_ATTRIBUTE __attribute__ ((__noreturn__))
     130             : #else
     131             : #define ROKEN_NORETURN_ATTRIBUTE
     132             : #endif
     133             : #endif
     134             : 
     135             : #ifndef ROKEN_UNUSED_ATTRIBUTE
     136             : #if __has_extension(unused) || ROKEN_REQUIRE_GNUC(3,1,0)
     137             : #define ROKEN_UNUSED_ATTRIBUTE __attribute__ ((__unused__))
     138             : #else
     139             : #define ROKEN_UNUSED_ATTRIBUTE
     140             : #endif
     141             : #endif
     142             : 
     143             : #ifndef ROKEN_WARN_UNUSED_RESULT_ATTRIBUTE
     144             : #if __has_extension(warn_unused_result) || ROKEN_REQUIRE_GNUC(3,3,0)
     145             : #define ROKEN_WARN_UNUSED_RESULT_ATTRIBUTE __attribute__ ((__warn_unused_result__))
     146             : #else
     147             : #define ROKEN_WARN_UNUSED_RESULT_ATTRIBUTE
     148             : #endif
     149             : #endif
     150             : 
     151             : #ifdef HAVE_WINSOCK
     152             : /* Declarations for Microsoft Windows */
     153             : 
     154             : #include <winsock2.h>
     155             : #include <ws2tcpip.h>
     156             : 
     157             : /*
     158             :  * error codes for inet_ntop/inet_pton
     159             :  */
     160             : typedef SOCKET rk_socket_t;
     161             : 
     162             : #define rk_closesocket(x) closesocket(x)
     163             : #define rk_INVALID_SOCKET INVALID_SOCKET
     164             : #define rk_IS_BAD_SOCKET(s) ((s) == INVALID_SOCKET)
     165             : #define rk_IS_SOCKET_ERROR(rv) ((rv) == SOCKET_ERROR)
     166             : #define rk_SOCK_ERRNO WSAGetLastError()
     167             : 
     168             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL rk_SOCK_IOCTL(SOCKET s, long cmd, int * argp);
     169             : 
     170             : #define rk_SOCK_INIT() rk_WSAStartup()
     171             : #define rk_SOCK_EXIT() rk_WSACleanup()
     172             : 
     173             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL rk_WSAStartup(void);
     174             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL rk_WSACleanup(void);
     175             : 
     176             : #else  /* not WinSock */
     177             : 
     178             : typedef int rk_socket_t;
     179             : 
     180             : #define rk_closesocket(x) close(x)
     181             : #define rk_SOCK_IOCTL(s,c,a) ioctl((s),(c),(a))
     182             : #define rk_IS_BAD_SOCKET(s) ((s) < 0)
     183             : #define rk_IS_SOCKET_ERROR(rv) ((rv) < 0)
     184             : #define rk_SOCK_ERRNO errno
     185             : #define rk_INVALID_SOCKET (-1)
     186             : 
     187      772494 : static inline ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL rk_SOCK_INIT(void) {
     188      772494 :         return 0;
     189             : }
     190             : 
     191             : #define rk_SOCK_EXIT() do { } while(0)
     192             : 
     193             : #endif  /* WinSock */
     194             : 
     195             : #ifndef IN_LOOPBACKNET
     196             : #define IN_LOOPBACKNET 127
     197             : #endif
     198             : 
     199             : #ifdef _MSC_VER
     200             : #ifndef HAVE_STDINT_H
     201             : #include <intsafe.h>
     202             : #endif
     203             : 
     204             : /* Declarations for Microsoft Visual C runtime on Windows */
     205             : 
     206             : #include<process.h>
     207             : 
     208             : #include<io.h>
     209             : 
     210             : #ifndef __BIT_TYPES_DEFINED__
     211             : #define __BIT_TYPES_DEFINED__
     212             : 
     213             : typedef __int8             int8_t;
     214             : typedef __int16            int16_t;
     215             : typedef __int32            int32_t;
     216             : typedef __int64            int64_t;
     217             : typedef unsigned __int8    uint8_t;
     218             : typedef unsigned __int16   uint16_t;
     219             : typedef unsigned __int32   uint32_t;
     220             : typedef unsigned __int64   uint64_t;
     221             : typedef uint8_t            u_int8_t;
     222             : typedef uint16_t           u_int16_t;
     223             : typedef uint32_t           u_int32_t;
     224             : typedef uint64_t           u_int64_t;
     225             : 
     226             : #endif  /* __BIT_TYPES_DEFINED__ */
     227             : 
     228             : #define UNREACHABLE(x) x
     229             : #define UNUSED_ARGUMENT(x) ((void) x)
     230             : 
     231             : #define RETSIGTYPE void
     232             : 
     233             : #define VOID_RETSIGTYPE 1
     234             : 
     235             : #ifdef VOID_RETSIGTYPE
     236             : #define SIGRETURN(x) return
     237             : #else
     238             : #define SIGRETURN(x) return (RETSIGTYPE)(x)
     239             : #endif
     240             : 
     241             : #ifndef CPP_ONLY
     242             : 
     243             : typedef int pid_t;
     244             : 
     245             : typedef unsigned int gid_t;
     246             : 
     247             : typedef unsigned int uid_t;
     248             : 
     249             : typedef unsigned short mode_t;
     250             : 
     251             : #endif
     252             : 
     253             : #ifndef __cplusplus
     254             : #define inline __inline
     255             : #endif
     256             : 
     257             : #else
     258             : 
     259             : #define UNREACHABLE(x)
     260             : #define UNUSED_ARGUMENT(x)
     261             : 
     262             : #endif
     263             : 
     264             : #ifdef _AIX
     265             : struct ether_addr;
     266             : struct sockaddr_dl;
     267             : #endif
     268             : #ifdef HAVE_SYS_PARAM_H
     269             : #include <sys/param.h>
     270             : #endif
     271             : #ifdef HAVE_INTTYPES_H
     272             : #include <inttypes.h>
     273             : #endif
     274             : #ifdef HAVE_SYS_TYPES_H
     275             : #include <sys/types.h>
     276             : #endif
     277             : #ifdef HAVE_SYS_ERRNO_H
     278             : #include <sys/errno.h>
     279             : #endif
     280             : #ifdef HAVE_SYS_BITYPES_H
     281             : #include <sys/bitypes.h>
     282             : #endif
     283             : #ifdef HAVE_BIND_BITYPES_H
     284             : #include <bind/bitypes.h>
     285             : #endif
     286             : #ifdef HAVE_NETINET_IN6_MACHTYPES_H
     287             : #include <netinet/in6_machtypes.h>
     288             : #endif
     289             : #ifdef HAVE_UNISTD_H
     290             : #include <unistd.h>
     291             : #endif
     292             : #ifdef HAVE_SYS_SOCKET_H
     293             : #include <sys/socket.h>
     294             : #endif
     295             : #ifdef HAVE_SYS_UIO_H
     296             : #include <sys/uio.h>
     297             : #endif
     298             : #ifdef HAVE_GRP_H
     299             : #include <grp.h>
     300             : #endif
     301             : #ifdef HAVE_SYS_STAT_H
     302             : #include <sys/stat.h>
     303             : #endif
     304             : #ifdef HAVE_NETINET_IN_H
     305             : #include <netinet/in.h>
     306             : #endif
     307             : #ifdef HAVE_NETINET_IN6_H
     308             : #include <netinet/in6.h>
     309             : #endif
     310             : #ifdef HAVE_NETINET6_IN6_H
     311             : #include <netinet6/in6.h>
     312             : #endif
     313             : #ifdef HAVE_ARPA_INET_H
     314             : #include <arpa/inet.h>
     315             : #endif
     316             : #ifdef HAVE_NETDB_H
     317             : #include <netdb.h>
     318             : #endif
     319             : #ifdef HAVE_ARPA_NAMESER_H
     320             : #include <arpa/nameser.h>
     321             : #endif
     322             : #ifdef HAVE_RESOLV_H
     323             : #include <resolv.h>
     324             : #endif
     325             : #ifdef HAVE_SYSLOG_H
     326             : #include <syslog.h>
     327             : #endif
     328             : #ifdef HAVE_FCNTL_H
     329             : #include <fcntl.h>
     330             : #endif
     331             : #ifdef HAVE_ERRNO_H
     332             : #include <errno.h>
     333             : #endif
     334             : #include <err.h>
     335             : #ifdef HAVE_TERMIOS_H
     336             : #include <termios.h>
     337             : #endif
     338             : #ifdef HAVE_SYS_IOCTL_H
     339             : #include <sys/ioctl.h>
     340             : #endif
     341             : #ifdef TIME_WITH_SYS_TIME
     342             : #include <sys/time.h>
     343             : #include <time.h>
     344             : #elif defined(HAVE_SYS_TIME_H)
     345             : #include <sys/time.h>
     346             : #else
     347             : #include <time.h>
     348             : #endif
     349             : 
     350             : #ifdef HAVE_PATHS_H
     351             : #include <paths.h>
     352             : #endif
     353             : 
     354             : #ifdef HAVE_DLFCN_H
     355             : #include <dlfcn.h>
     356             : #endif
     357             : 
     358             : #ifdef HAVE_DIRENT_H
     359             : #include <dirent.h>
     360             : #endif
     361             : 
     362             : #ifdef WIN32
     363             : #include <direct.h>
     364             : #endif
     365             : 
     366             : #ifdef BACKSLASH_PATH_DELIM
     367             : #define rk_PATH_DELIM '\\'
     368             : #endif
     369             : 
     370             : #ifndef HAVE_SSIZE_T
     371             : #ifndef SSIZE_T_DEFINED
     372             : #ifdef ssize_t
     373             : #undef ssize_t
     374             : #endif
     375             : #ifdef _WIN64
     376             : typedef __int64 ssize_t;
     377             : #else
     378             : typedef int ssize_t;
     379             : #endif
     380             : #define SSIZE_T_DEFINED
     381             : #endif  /* SSIZE_T_DEFINED */
     382             : #endif  /* HAVE_SSIZE_T */
     383             : 
     384             : #include <roken-common.h>
     385             : 
     386             : ROKEN_CPP_START
     387             : 
     388             : #ifdef HAVE_UINTPTR_T
     389             : #define rk_UNCONST(x) ((void *)(uintptr_t)(const void *)(x))
     390             : #else
     391             : #define rk_UNCONST(x) ((void *)(unsigned long)(const void *)(x))
     392             : #endif
     393             : 
     394             : #if !defined(HAVE_SETSID) && defined(HAVE__SETSID)
     395             : #define setsid _setsid
     396             : #endif
     397             : 
     398             : #ifdef _MSC_VER
     399             : /* Additional macros for Visual C/C++ runtime */
     400             : 
     401             : #define close   _close
     402             : 
     403             : #define getpid  _getpid
     404             : 
     405             : #define open    _open
     406             : 
     407             : #define chdir   _chdir
     408             : 
     409             : #define fsync   _commit
     410             : 
     411             : #define _PIPE_BUFFER_SZ 8192
     412             : #define pipe(fds) _pipe((fds), _PIPE_BUFFER_SZ, O_BINARY);
     413             : 
     414             : #define ftruncate(fd, sz) _chsize((fd), (sz))
     415             : 
     416             : #if !defined(HAVE_UCRT)
     417             : #define snprintf    rk_snprintf
     418             : #define vsnprintf   rk_vsnprintf
     419             : #define vasnprintf  rk_vasnprintf
     420             : #define vasprintf   rk_vasprintf
     421             : #define asnprintf   rk_asnprintf
     422             : #define asprintf    rk_asprintf
     423             : 
     424             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
     425             : rk_snprintf (char *str, size_t sz, const char *format, ...);
     426             : 
     427             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
     428             : rk_asprintf (char **ret, const char *format, ...);
     429             : 
     430             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
     431             : rk_asnprintf (char **ret, size_t max_sz, const char *format, ...);
     432             : 
     433             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
     434             : rk_vasprintf (char **ret, const char *format, va_list args);
     435             : 
     436             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
     437             : rk_vasnprintf (char **ret, size_t max_sz, const char *format, va_list args);
     438             : 
     439             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
     440             : rk_vsnprintf (char *str, size_t sz, const char *format, va_list args);
     441             : #endif /* !defined(HAVE_UCRT) */
     442             : 
     443             : /* missing stat.h predicates */
     444             : 
     445             : #define S_ISREG(m) (((m) & _S_IFREG) == _S_IFREG)
     446             : 
     447             : #define S_ISDIR(m) (((m) & _S_IFDIR) == _S_IFDIR)
     448             : 
     449             : #define S_ISCHR(m) (((m) & _S_IFCHR) == _S_IFCHR)
     450             : 
     451             : #define S_ISFIFO(m) (((m) & _S_IFIFO) == _S_IFIFO)
     452             : 
     453             : /* The following are not implemented:
     454             : 
     455             :  S_ISLNK(m)
     456             :  S_ISSOCK(m)
     457             :  S_ISBLK(m)
     458             : */
     459             : 
     460             : /* The following symbolic constants are provided for rk_mkdir mode */
     461             : 
     462             : #define S_IRWXU 00700 /* user (file owner) has read, write and execute permission */
     463             : #define S_IRUSR 00400 /* user has read permission */
     464             : #define S_IWUSR 00200 /* user has write permission */
     465             : #define S_IXUSR 00100 /* user has execute permission */
     466             : #define S_IRWXG 00070 /* group has read, write and execute permission */
     467             : #define S_IRGRP 00040 /* group has read permission */
     468             : #define S_IWGRP 00020 /* group has write permission */
     469             : #define S_IXGRP 00010 /* group has execute permission */
     470             : #define S_IRWXO 00007 /* others have read, write and execute permission */
     471             : #define S_IROTH 00004 /* others have read permission */
     472             : #define S_IWOTH 00002 /* others have write permission */
     473             : #define S_IXOTH 00001 /* others have execute permission */
     474             : 
     475             : #if !defined(ROKEN_NO_DEFINE_ALLOCATORS)
     476             : /* Ensure that a common memory allocator is used by all */
     477             : #define calloc  rk_calloc
     478             : #define free    rk_free
     479             : #define malloc  rk_malloc
     480             : #define realloc rk_realloc
     481             : #define strdup  rk_strdup
     482             : #define wcsdup  rk_wcsdup
     483             : #endif
     484             : 
     485             : ROKEN_LIB_FUNCTION void * ROKEN_LIB_CALL
     486             : rk_calloc(size_t, size_t);
     487             : 
     488             : ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
     489             : rk_free(void *);
     490             : 
     491             : ROKEN_LIB_FUNCTION void * ROKEN_LIB_CALL
     492             : rk_malloc(size_t);
     493             : 
     494             : ROKEN_LIB_FUNCTION void * ROKEN_LIB_CALL
     495             : rk_realloc(void *, size_t);
     496             : 
     497             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL
     498             : rk_strdup(const char *);
     499             : 
     500             : ROKEN_LIB_FUNCTION unsigned short * ROKEN_LIB_CALL
     501             : rk_wcsdup(const unsigned short *);
     502             : 
     503             : #endif  /* _MSC_VER */
     504             : 
     505             : #ifndef HAVE_MEMMEM
     506             : #define memmem rk_smemmem
     507             : ROKEN_LIB_FUNCTION void * ROKEN_LIB_CALL memmem(const void *, size_t, const void *, size_t);
     508             : #endif
     509             : 
     510             : #ifdef HAVE_WINSOCK
     511             : 
     512             : /* While we are at it, define WinSock specific scatter gather socket
     513             :    I/O. */
     514             : 
     515             : #define iovec    _WSABUF
     516             : #define iov_base buf
     517             : #define iov_len  len
     518             : 
     519             : struct msghdr {
     520             :     void           *msg_name;
     521             :     socklen_t       msg_namelen;
     522             :     struct iovec   *msg_iov;
     523             :     size_t          msg_iovlen;
     524             :     void           *msg_control;
     525             :     socklen_t       msg_controllen;
     526             :     int             msg_flags;
     527             : };
     528             : 
     529             : #define sendmsg sendmsg_w32
     530             : 
     531             : ROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL
     532             : sendmsg_w32(rk_socket_t s, const struct msghdr * msg, int flags);
     533             : 
     534             : #endif  /* HAVE_WINSOCK */
     535             : 
     536             : #ifndef HAVE_PUTENV
     537             : #define putenv rk_putenv
     538             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL putenv(const char *);
     539             : #endif
     540             : 
     541             : #if !defined(HAVE_SETENV) || defined(NEED_SETENV_PROTO)
     542             : #ifndef HAVE_SETENV
     543             : #define setenv rk_setenv
     544             : #endif
     545             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL setenv(const char *, const char *, int);
     546             : #endif
     547             : 
     548             : #if !defined(HAVE_UNSETENV) || defined(NEED_UNSETENV_PROTO)
     549             : #ifndef HAVE_UNSETENV
     550             : #define unsetenv rk_unsetenv
     551             : #endif
     552             : ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL unsetenv(const char *);
     553             : #endif
     554             : 
     555             : #if !defined(HAVE_GETUSERSHELL) || defined(NEED_GETUSERSHELL_PROTO)
     556             : #ifndef HAVE_GETUSERSHELL
     557             : #define getusershell rk_getusershell
     558             : #define endusershell rk_endusershell
     559             : #endif
     560             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL getusershell(void);
     561             : ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL endusershell(void);
     562             : #endif
     563             : 
     564             : #if !defined(HAVE_SNPRINTF) || defined(NEED_SNPRINTF_PROTO)
     565             : #ifndef HAVE_SNPRINTF
     566             : #define snprintf rk_snprintf
     567             : #endif
     568             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
     569             :      rk_snprintf (char *, size_t, const char *, ...)
     570             :      ROKEN_PRINTF_ATTRIBUTE((__printf__, 3, 4));
     571             : #endif
     572             : 
     573             : #if !defined(HAVE_VSNPRINTF) || defined(NEED_VSNPRINTF_PROTO)
     574             : #ifndef HAVE_VSNPRINTF
     575             : #define vsnprintf rk_vsnprintf
     576             : #endif
     577             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
     578             :      rk_vsnprintf (char *, size_t, const char *, va_list)
     579             :      ROKEN_PRINTF_ATTRIBUTE((__printf__, 3, 0));
     580             : #endif
     581             : 
     582             : #if !defined(HAVE_ASPRINTF) || defined(NEED_ASPRINTF_PROTO)
     583             : #ifndef HAVE_ASPRINTF
     584             : #define asprintf rk_asprintf
     585             : #endif
     586             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
     587             :      rk_asprintf (char **, const char *, ...)
     588             :      ROKEN_PRINTF_ATTRIBUTE((__printf__, 2, 3));
     589             : #endif
     590             : 
     591             : #if !defined(HAVE_VASPRINTF) || defined(NEED_VASPRINTF_PROTO)
     592             : #ifndef HAVE_VASPRINTF
     593             : #define vasprintf rk_vasprintf
     594             : #endif
     595             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
     596             :     rk_vasprintf (char **, const char *, va_list)
     597             :     ROKEN_PRINTF_ATTRIBUTE((__printf__, 2, 0));
     598             : #endif
     599             : 
     600             : #if !defined(HAVE_ASNPRINTF) || defined(NEED_ASNPRINTF_PROTO)
     601             : #ifndef HAVE_ASNPRINTF
     602             : #define asnprintf rk_asnprintf
     603             : #endif
     604             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
     605             :     rk_asnprintf (char **, size_t, const char *, ...)
     606             :     ROKEN_PRINTF_ATTRIBUTE((__printf__, 3, 4));
     607             : #endif
     608             : 
     609             : #if !defined(HAVE_VASNPRINTF) || defined(NEED_VASNPRINTF_PROTO)
     610             : #ifndef HAVE_VASNPRINTF
     611             : #define vasnprintf rk_vasnprintf
     612             : #endif
     613             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
     614             :     vasnprintf (char **, size_t, const char *, va_list)
     615             :     ROKEN_PRINTF_ATTRIBUTE((__printf__, 3, 0));
     616             : #endif
     617             : 
     618             : #if !defined(HAVE_EVASPRINTF) || defined(NEED_EVASPRINTF_PROTO)
     619             : #define evasprintf  rk_evasprintf
     620             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL
     621             : rk_evasprintf(const char *format, va_list args);
     622             : #endif
     623             : 
     624             : #if !defined(HAVE_EASPRINTF) || defined(NEED_EASPRINTF_PROTO)
     625             : #define easprintf   rk_easprintf
     626             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL
     627             : rk_easprintf(const char *format, ...);
     628             : #endif
     629             : 
     630             : #ifndef HAVE_STRDUP
     631             : #define strdup rk_strdup
     632             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strdup(const char *);
     633             : #endif
     634             : 
     635             : #if !defined(HAVE_STRNDUP) || defined(NEED_STRNDUP_PROTO)
     636             : #ifndef HAVE_STRNDUP
     637             : #define strndup rk_strndup
     638             : #endif
     639             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strndup(const char *, size_t);
     640             : #endif
     641             : 
     642             : #ifndef HAVE_STRLWR
     643             : #define strlwr rk_strlwr
     644             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strlwr(char *);
     645             : #endif
     646             : 
     647             : #ifndef HAVE_STRNLEN
     648             : #define strnlen rk_strnlen
     649             : ROKEN_LIB_FUNCTION size_t ROKEN_LIB_CALL strnlen(const char*, size_t);
     650             : #endif
     651             : 
     652             : #if !defined(HAVE_STRSEP) || defined(NEED_STRSEP_PROTO)
     653             : #ifndef HAVE_STRSEP
     654             : #define strsep rk_strsep
     655             : #endif
     656             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strsep(char**, const char*);
     657             : #endif
     658             : 
     659             : #if !defined(HAVE_STRSEP_COPY) || defined(NEED_STRSEP_COPY_PROTO)
     660             : #ifndef HAVE_STRSEP_COPY
     661             : #define strsep_copy rk_strsep_copy
     662             : #endif
     663             : ROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL strsep_copy(const char**, const char*, char*, size_t);
     664             : #endif
     665             : 
     666             : #ifndef HAVE_STRCASECMP
     667             : #define strcasecmp rk_strcasecmp
     668             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL strcasecmp(const char *, const char *);
     669             : #endif
     670             : 
     671             : #ifdef NEED_FCLOSE_PROTO
     672             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL fclose(FILE *);
     673             : #endif
     674             : 
     675             : #ifdef NEED_STRTOK_R_PROTO
     676             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strtok_r(char *, const char *, char **);
     677             : #endif
     678             : 
     679             : #ifndef HAVE_STRUPR
     680             : #define strupr rk_strupr
     681             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strupr(char *);
     682             : #endif
     683             : 
     684             : #ifndef HAVE_STRLCPY
     685             : #define strlcpy rk_strlcpy
     686             : ROKEN_LIB_FUNCTION size_t ROKEN_LIB_CALL strlcpy (char *, const char *, size_t);
     687             : #endif
     688             : 
     689             : #ifndef HAVE_STRLCAT
     690             : #define strlcat rk_strlcat
     691             : ROKEN_LIB_FUNCTION size_t ROKEN_LIB_CALL strlcat (char *, const char *, size_t);
     692             : #endif
     693             : 
     694             : #ifndef HAVE_GETDTABLESIZE
     695             : #define getdtablesize rk_getdtablesize
     696             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL getdtablesize(void);
     697             : #endif
     698             : 
     699             : #if !defined(HAVE_STRERROR) && !defined(strerror)
     700             : #define strerror rk_strerror
     701             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL strerror(int);
     702             : #endif
     703             : 
     704             : #if (!defined(HAVE_STRERROR_R) && !defined(strerror_r)) || (!defined(STRERROR_R_PROTO_COMPATIBLE) && defined(HAVE_STRERROR_R))
     705             : int ROKEN_LIB_FUNCTION rk_strerror_r(int, char *, size_t);
     706             : #else
     707             : #define rk_strerror_r strerror_r
     708             : #endif
     709             : 
     710             : #if !defined(HAVE_HSTRERROR) || defined(NEED_HSTRERROR_PROTO)
     711             : #ifndef HAVE_HSTRERROR
     712             : #define hstrerror rk_hstrerror
     713             : #endif
     714             : /* This causes a fatal error under Psoriasis */
     715             : #ifndef SunOS
     716             : ROKEN_LIB_FUNCTION const char * ROKEN_LIB_CALL hstrerror(int);
     717             : #endif
     718             : #endif
     719             : 
     720             : #if !HAVE_DECL_H_ERRNO
     721             : extern int h_errno;
     722             : #endif
     723             : 
     724             : #if !defined(HAVE_INET_ATON) || defined(NEED_INET_ATON_PROTO)
     725             : #ifndef HAVE_INET_ATON
     726             : #define inet_aton rk_inet_aton
     727             : #endif
     728             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL inet_aton(const char *, struct in_addr *);
     729             : #endif
     730             : 
     731             : #ifndef HAVE_INET_NTOP
     732             : #define inet_ntop rk_inet_ntop
     733             : ROKEN_LIB_FUNCTION const char * ROKEN_LIB_CALL
     734             : inet_ntop(int af, const void *src, char *dst, size_t size);
     735             : #endif
     736             : 
     737             : #ifndef HAVE_INET_PTON
     738             : #define inet_pton rk_inet_pton
     739             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
     740             : inet_pton(int, const char *, void *);
     741             : #endif
     742             : 
     743             : #ifndef HAVE_GETCWD
     744             : #define getcwd rk_getcwd
     745             : ROKEN_LIB_FUNCTION char* ROKEN_LIB_CALL getcwd(char *, size_t);
     746             : #endif
     747             : 
     748             : #ifdef HAVE_PWD_H
     749             : #include <pwd.h>
     750             : #endif
     751             : 
     752             : #ifndef HAVE_SETEUID
     753             : #define seteuid rk_seteuid
     754             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL seteuid(uid_t);
     755             : #endif
     756             : 
     757             : #ifndef HAVE_SETEGID
     758             : #define setegid rk_setegid
     759             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL setegid(gid_t);
     760             : #endif
     761             : 
     762             : #ifndef HAVE_LSTAT
     763             : #define lstat rk_lstat
     764             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL lstat(const char *, struct stat *);
     765             : #endif
     766             : 
     767             : #if !defined(HAVE_MKSTEMP) || defined(NEED_MKSTEMP_PROTO)
     768             : #ifndef HAVE_MKSTEMP
     769             : #define mkstemp rk_mkstemp
     770             : #endif
     771             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL mkstemp(char *);
     772             : #endif
     773             : 
     774             : #ifndef HAVE_MKOSTEMP
     775             : #define mkostemp rk_mkostemp
     776             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL mkostemp(char *, int);
     777             : #endif
     778             : 
     779             : #ifndef HAVE_MKDTEMP
     780             : #define mkdtemp rk_mkdtemp
     781             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL mkdtemp(char *);
     782             : #endif
     783             : 
     784             : #ifndef HAVE_INITGROUPS
     785             : #define initgroups rk_initgroups
     786             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL initgroups(const char *, gid_t);
     787             : #endif
     788             : 
     789             : #ifndef HAVE_FCHOWN
     790             : #define fchown rk_fchown
     791             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL fchown(int, uid_t, gid_t);
     792             : #endif
     793             : 
     794             : #ifdef RENAME_DOES_NOT_UNLINK
     795             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL rk_rename(const char *, const char *);
     796             : #else
     797             : #define rk_rename(__rk_rn_from,__rk_rn_to) rename(__rk_rn_from,__rk_rn_to)
     798             : #endif
     799             : 
     800             : #ifdef WIN32
     801             : #define mkdir rk_mkdir
     802             : #else
     803             : #define rk_mkdir(__rk_rn_name, __rk_rn_mode) mkdir(__rk_rn_name,__rk_rn_mode)
     804             : #endif
     805             : 
     806             : 
     807             : #if !defined(HAVE_DAEMON) || defined(NEED_DAEMON_PROTO)
     808             : #ifndef HAVE_DAEMON
     809             : #define daemon rk_daemon
     810             : #endif
     811             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL daemon(int, int);
     812             : #endif
     813             : 
     814             : #ifndef HAVE_CHOWN
     815             : #define chown rk_chown
     816             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL chown(const char *, uid_t, gid_t);
     817             : #endif
     818             : 
     819             : #ifndef HAVE_RCMD
     820             : #define rcmd rk_rcmd
     821             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
     822             :     rcmd(char **, unsigned short, const char *,
     823             :          const char *, const char *, int *);
     824             : #endif
     825             : 
     826             : #if !defined(HAVE_INNETGR) || defined(NEED_INNETGR_PROTO)
     827             : #ifndef HAVE_INNETGR
     828             : #define innetgr rk_innetgr
     829             : #endif
     830             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL innetgr(const char*, const char*,
     831             :     const char*, const char*);
     832             : #endif
     833             : 
     834             : #if !defined(HAVE_GETHOSTNAME) || defined(NEED_GETHOSTNAME_PROTO)
     835             : #ifndef HAVE_GETHOSTNAME
     836             : #define gethostname rk_gethostname
     837             : #endif
     838             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL gethostname(char *, int);
     839             : #endif
     840             : 
     841             : #ifndef HAVE_WRITEV
     842             : #define writev rk_writev
     843             : ROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL
     844             : writev(int, const struct iovec *, int);
     845             : #endif
     846             : 
     847             : #ifndef HAVE_READV
     848             : #define readv rk_readv
     849             : ROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL
     850             : readv(int, const struct iovec *, int);
     851             : #endif
     852             : 
     853             : #ifdef NO_PIDFILES
     854             : #define rk_pidfile(x) ((void) 0)
     855             : #else
     856             : ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL rk_pidfile (const char*);
     857             : #endif
     858             : 
     859             : #ifndef HAVE_BSWAP64
     860             : #define bswap64 rk_bswap64
     861             : ROKEN_LIB_FUNCTION uint64_t ROKEN_LIB_CALL bswap64(uint64_t);
     862             : #endif
     863             : 
     864             : #ifndef HAVE_BSWAP32
     865             : #define bswap32 rk_bswap32
     866             : ROKEN_LIB_FUNCTION unsigned int ROKEN_LIB_CALL bswap32(unsigned int);
     867             : #endif
     868             : 
     869             : #ifndef HAVE_BSWAP16
     870             : #define bswap16 rk_bswap16
     871             : ROKEN_LIB_FUNCTION unsigned short ROKEN_LIB_CALL bswap16(unsigned short);
     872             : #endif
     873             : 
     874             : #ifndef HAVE_FLOCK
     875             : #ifndef LOCK_SH
     876             : #define LOCK_SH   1             /* Shared lock */
     877             : #endif
     878             : #ifndef LOCK_EX
     879             : #define LOCK_EX   2             /* Exclusive lock */
     880             : #endif
     881             : #ifndef LOCK_NB
     882             : #define LOCK_NB   4             /* Don't block when locking */
     883             : #endif
     884             : #ifndef LOCK_UN
     885             : #define LOCK_UN   8             /* Unlock */
     886             : #endif
     887             : 
     888             : #define flock(_x,_y) rk_flock(_x,_y)
     889             : int rk_flock(int fd, int operation);
     890             : #endif /* HAVE_FLOCK */
     891             : 
     892             : #ifndef HAVE_DIRFD
     893             : #ifdef HAVE_DIR_DD_FD
     894             : #define dirfd(x) ((x)->dd_fd)
     895             : #elif defined(HAVE_DIR_D_FD)
     896             : #define dirfd(x) ((x)->d_fd)
     897             : #else
     898             : #ifndef _WIN32 /* Windows code never calls dirfd */
     899             : #error Missing dirfd() and ->dd_fd and ->d_fd
     900             : #endif
     901             : #endif
     902             : #endif
     903             : 
     904             : ROKEN_LIB_FUNCTION time_t ROKEN_LIB_CALL tm2time (struct tm, int);
     905             : 
     906             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL roken_concat (char *, size_t, ...);
     907             : 
     908             : ROKEN_LIB_FUNCTION size_t ROKEN_LIB_CALL roken_mconcat (char **, size_t, ...);
     909             : 
     910             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL roken_vconcat (char *, size_t, va_list);
     911             : 
     912             : ROKEN_LIB_FUNCTION size_t ROKEN_LIB_CALL
     913             :     roken_vmconcat (char **, size_t, va_list);
     914             : 
     915             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL roken_detach_prep(int, char **, char *);
     916             : ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL roken_detach_finish(const char *, int);
     917             : 
     918             : ROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL
     919             :     net_write (rk_socket_t, const void *, size_t);
     920             : 
     921             : ROKEN_LIB_FUNCTION ssize_t ROKEN_LIB_CALL
     922             :     net_read (rk_socket_t, void *, size_t);
     923             : 
     924             : ROKEN_LIB_FUNCTION unsigned long ROKEN_LIB_CALL
     925             :     rk_getauxval(unsigned long);
     926             : 
     927             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
     928             :     issuid(void);
     929             : 
     930             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL
     931             :     rk_secure_getenv(const char *);
     932             : 
     933             : #ifndef HAVE_SECURE_GETENV
     934             : #undef secure_getenv
     935             : #define secure_getenv(e) rk_secure_getenv(e)
     936             : #endif
     937             : 
     938             : #ifndef HAVE_STRUCT_WINSIZE
     939             : struct winsize {
     940             :         unsigned short ws_row, ws_col;
     941             :         unsigned short ws_xpixel, ws_ypixel;
     942             : };
     943             : #endif
     944             : 
     945             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL get_window_size(int fd, int *, int *);
     946             : 
     947             : #ifndef HAVE_VSYSLOG
     948             : #define vsyslog rk_vsyslog
     949             : ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL vsyslog(int, const char *, va_list);
     950             : #endif
     951             : 
     952             : #ifndef HAVE_GETOPT
     953             : #define getopt rk_getopt
     954             : #define optarg rk_optarg
     955             : #define optind rk_optind
     956             : #define opterr rk_opterr
     957             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
     958             : getopt(int nargc, char * const *nargv, const char *ostr);
     959             : #endif
     960             : 
     961             : #if !HAVE_DECL_OPTARG
     962             : ROKEN_LIB_VARIABLE extern char *optarg;
     963             : #endif
     964             : #if !HAVE_DECL_OPTIND
     965             : ROKEN_LIB_VARIABLE extern int optind;
     966             : #endif
     967             : #if !HAVE_DECL_OPTERR
     968             : ROKEN_LIB_VARIABLE extern int opterr;
     969             : #endif
     970             : 
     971             : #ifndef HAVE_GETIPNODEBYNAME
     972             : #define getipnodebyname rk_getipnodebyname
     973             : #endif
     974             : ROKEN_LIB_FUNCTION struct hostent * ROKEN_LIB_CALL
     975             : rk_getipnodebyname(const char *, int, int, int *);
     976             : 
     977             : #ifndef HAVE_GETIPNODEBYADDR
     978             : #define getipnodebyaddr rk_getipnodebyaddr
     979             : #endif
     980             : ROKEN_LIB_FUNCTION struct hostent * ROKEN_LIB_CALL
     981             : rk_getipnodebyaddr(const void *, size_t, int, int *);
     982             : 
     983             : #ifndef HAVE_FREEHOSTENT
     984             : #define freehostent rk_freehostent
     985             : #endif
     986             : ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
     987             : rk_freehostent(struct hostent *);
     988             : 
     989             : #ifndef HAVE_COPYHOSTENT
     990             : #define copyhostent rk_copyhostent
     991             : #endif
     992             : ROKEN_LIB_FUNCTION struct hostent * ROKEN_LIB_CALL
     993             : rk_copyhostent(const struct hostent *);
     994             : 
     995             : #ifndef HAVE_SOCKLEN_T
     996             : typedef int socklen_t;
     997             : #endif
     998             : 
     999             : #ifndef HAVE_STRUCT_SOCKADDR_STORAGE
    1000             : 
    1001             : #ifndef HAVE_SA_FAMILY_T
    1002             : typedef unsigned short sa_family_t;
    1003             : #endif
    1004             : 
    1005             : #ifdef HAVE_IPV6
    1006             : #define _SS_MAXSIZE sizeof(struct sockaddr_in6)
    1007             : #else
    1008             : #define _SS_MAXSIZE sizeof(struct sockaddr_in)
    1009             : #endif
    1010             : 
    1011             : #define _SS_ALIGNSIZE   sizeof(unsigned long)
    1012             : 
    1013             : #if HAVE_STRUCT_SOCKADDR_SA_LEN
    1014             : 
    1015             : typedef unsigned char roken_sa_family_t;
    1016             : 
    1017             : #define _SS_PAD1SIZE   ((2 * _SS_ALIGNSIZE - sizeof (roken_sa_family_t) - sizeof(unsigned char)) % _SS_ALIGNSIZE)
    1018             : #define _SS_PAD2SIZE   (_SS_MAXSIZE - (sizeof (roken_sa_family_t) + sizeof(unsigned char) + _SS_PAD1SIZE + _SS_ALIGNSIZE))
    1019             : 
    1020             : struct sockaddr_storage {
    1021             :     unsigned char       ss_len;
    1022             :     roken_sa_family_t   ss_family;
    1023             :     char                __ss_pad1[_SS_PAD1SIZE];
    1024             :     unsigned long       __ss_align[_SS_PAD2SIZE / sizeof(unsigned long) + 1];
    1025             : };
    1026             : 
    1027             : #else /* !HAVE_STRUCT_SOCKADDR_SA_LEN */
    1028             : 
    1029             : typedef unsigned short roken_sa_family_t;
    1030             : 
    1031             : #define _SS_PAD1SIZE   ((2 * _SS_ALIGNSIZE - sizeof (roken_sa_family_t)) % _SS_ALIGNSIZE)
    1032             : #define _SS_PAD2SIZE   (_SS_MAXSIZE - (sizeof (roken_sa_family_t) + _SS_PAD1SIZE + _SS_ALIGNSIZE))
    1033             : 
    1034             : struct sockaddr_storage {
    1035             :     roken_sa_family_t   ss_family;
    1036             :     char                __ss_pad1[_SS_PAD1SIZE];
    1037             :     unsigned long       __ss_align[_SS_PAD2SIZE / sizeof(unsigned long) + 1];
    1038             : };
    1039             : 
    1040             : #endif /* HAVE_STRUCT_SOCKADDR_SA_LEN */
    1041             : 
    1042             : #endif /* HAVE_STRUCT_SOCKADDR_STORAGE */
    1043             : 
    1044             : #ifndef HAVE_STRUCT_ADDRINFO
    1045             : struct addrinfo {
    1046             :     int    ai_flags;
    1047             :     int    ai_family;
    1048             :     int    ai_socktype;
    1049             :     int    ai_protocol;
    1050             :     size_t ai_addrlen;
    1051             :     char  *ai_canonname;
    1052             :     struct sockaddr *ai_addr;
    1053             :     struct addrinfo *ai_next;
    1054             : };
    1055             : #endif
    1056             : 
    1057             : #ifndef HAVE_GETADDRINFO
    1058             : #define getaddrinfo rk_getaddrinfo
    1059             : #endif
    1060             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
    1061             : rk_getaddrinfo(const char *,
    1062             :                const char *,
    1063             :                const struct addrinfo *,
    1064             :                struct addrinfo **);
    1065             : 
    1066             : #ifndef HAVE_GETNAMEINFO
    1067             : #define getnameinfo rk_getnameinfo
    1068             : #endif
    1069             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
    1070             : rk_getnameinfo(const struct sockaddr *, socklen_t,
    1071             :                char *, size_t,
    1072             :                char *, size_t,
    1073             :                int);
    1074             : 
    1075             : #ifndef HAVE_FREEADDRINFO
    1076             : #define freeaddrinfo rk_freeaddrinfo
    1077             : #endif
    1078             : ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
    1079             : rk_freeaddrinfo(struct addrinfo *);
    1080             : 
    1081             : #ifndef HAVE_GAI_STRERROR
    1082             : #define gai_strerror rk_gai_strerror
    1083             : ROKEN_LIB_FUNCTION const char * ROKEN_LIB_CALL
    1084             : gai_strerror(int);
    1085             : #endif
    1086             : 
    1087             : #ifdef NO_SLEEP
    1088             : 
    1089             : ROKEN_LIB_FUNCTION unsigned int ROKEN_LIB_CALL
    1090             : sleep(unsigned int seconds);
    1091             : 
    1092             : ROKEN_LIB_FUNCTION unsigned int ROKEN_LIB_CALL
    1093             : usleep(unsigned int useconds);
    1094             : 
    1095             : #endif
    1096             : 
    1097             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
    1098             : getnameinfo_verified(const struct sockaddr *, socklen_t,
    1099             :                      char *, size_t,
    1100             :                      char *, size_t,
    1101             :                      int);
    1102             : 
    1103             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
    1104             : roken_getaddrinfo_hostspec(const char *, int, struct addrinfo **);
    1105             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
    1106             : roken_getaddrinfo_hostspec2(const char *, int, int, struct addrinfo **);
    1107             : 
    1108             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL
    1109             : roken_get_homedir(char *, size_t);
    1110             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL
    1111             : roken_get_appdatadir(char *, size_t);
    1112             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL
    1113             : roken_get_username(char *, size_t);
    1114             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL
    1115             : roken_get_loginname(char *, size_t);
    1116             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL
    1117             : roken_get_shell(char *, size_t);
    1118             : 
    1119             : #ifndef HAVE_STRFTIME
    1120             : #define strftime rk_strftime
    1121             : ROKEN_LIB_FUNCTION size_t ROKEN_LIB_CALL
    1122             : strftime (char *, size_t, const char *, const struct tm *);
    1123             : #endif
    1124             : 
    1125             : #ifndef HAVE_STRPTIME
    1126             : #define strptime rk_strptime
    1127             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL
    1128             : strptime (const char *, const char *, struct tm *);
    1129             : #endif
    1130             : 
    1131             : #ifndef HAVE_GETTIMEOFDAY
    1132             : #define gettimeofday rk_gettimeofday
    1133             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
    1134             : gettimeofday (struct timeval *, void *);
    1135             : #endif
    1136             : 
    1137             : #ifndef HAVE_EMALLOC
    1138             : #define emalloc rk_emalloc
    1139             : ROKEN_LIB_FUNCTION void * ROKEN_LIB_CALL emalloc (size_t);
    1140             : #endif
    1141             : #ifndef HAVE_ECALLOC
    1142             : #define ecalloc rk_ecalloc
    1143             : ROKEN_LIB_FUNCTION void * ROKEN_LIB_CALL ecalloc(size_t, size_t);
    1144             : #endif
    1145             : #ifndef HAVE_EREALLOC
    1146             : #define erealloc rk_erealloc
    1147             : ROKEN_LIB_FUNCTION void * ROKEN_LIB_CALL erealloc (void *, size_t);
    1148             : #endif
    1149             : #ifndef HAVE_ESTRDUP
    1150             : #define estrdup rk_estrdup
    1151             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL estrdup (const char *);
    1152             : #endif
    1153             : 
    1154             : /*
    1155             :  * kludges and such
    1156             :  */
    1157             : 
    1158             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
    1159             : roken_gethostby_setup(const char*, const char*);
    1160             : ROKEN_LIB_FUNCTION struct hostent* ROKEN_LIB_CALL
    1161             : roken_gethostbyname(const char*);
    1162             : ROKEN_LIB_FUNCTION struct hostent* ROKEN_LIB_CALL
    1163             : roken_gethostbyaddr(const void*, size_t, int);
    1164             : 
    1165             : #ifdef GETSERVBYNAME_PROTO_COMPATIBLE
    1166             : #define roken_getservbyname(x,y) getservbyname(x,y)
    1167             : #else
    1168             : #define roken_getservbyname(x,y) getservbyname((char *)x, (char *)y)
    1169             : #endif
    1170             : 
    1171             : #ifdef OPENLOG_PROTO_COMPATIBLE
    1172             : #define roken_openlog(a,b,c) openlog(a,b,c)
    1173             : #else
    1174             : #define roken_openlog(a,b,c) openlog((char *)a,b,c)
    1175             : #endif
    1176             : 
    1177             : #ifdef GETSOCKNAME_PROTO_COMPATIBLE
    1178             : #define roken_getsockname(a,b,c) getsockname(a,b,c)
    1179             : #else
    1180             : #define roken_getsockname(a,b,c) getsockname(a, b, (void*)c)
    1181             : #endif
    1182             : 
    1183             : #ifndef HAVE_SETPROGNAME
    1184             : #define setprogname rk_setprogname
    1185             : ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL setprogname(const char *);
    1186             : #endif
    1187             : 
    1188             : #ifndef HAVE_GETPROGNAME
    1189             : #define getprogname rk_getprogname
    1190             : ROKEN_LIB_FUNCTION const char * ROKEN_LIB_CALL getprogname(void);
    1191             : #endif
    1192             : 
    1193             : #if !defined(HAVE_SETPROGNAME) && !defined(HAVE_GETPROGNAME) && !HAVE_DECL___PROGNAME
    1194             : extern const char *__progname;
    1195             : #endif
    1196             : 
    1197             : ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
    1198             : mini_inetd_addrinfo (struct addrinfo*, rk_socket_t *);
    1199             : 
    1200             : ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
    1201             : mini_inetd (int, rk_socket_t *);
    1202             : 
    1203             : #ifndef HAVE_LOCALTIME_R
    1204             : #define localtime_r rk_localtime_r
    1205             : ROKEN_LIB_FUNCTION struct tm * ROKEN_LIB_CALL
    1206             : localtime_r(const time_t *, struct tm *);
    1207             : #endif
    1208             : 
    1209             : #if !defined(HAVE_STRTOLL) || defined(NEED_STRTOLL_PROTO)
    1210             : #ifndef HAVE_STRTOLL
    1211             : #define strtoll rk_strtoll
    1212             : #endif
    1213             : ROKEN_LIB_FUNCTION long long ROKEN_LIB_CALL
    1214             : strtoll(const char * nptr, char ** endptr, int base);
    1215             : #endif
    1216             : 
    1217             : #if !defined(HAVE_STRTOULL) || defined(NEED_STRTOULL_PROTO)
    1218             : #ifndef HAVE_STRTOULL
    1219             : #define strtoull rk_strtoull
    1220             : #endif
    1221             : ROKEN_LIB_FUNCTION unsigned long long ROKEN_LIB_CALL
    1222             : strtoull(const char * nptr, char ** endptr, int base);
    1223             : #endif
    1224             : 
    1225             : #if !defined(HAVE_STRSVIS) || defined(NEED_STRSVIS_PROTO)
    1226             : #ifndef HAVE_STRSVIS
    1227             : #define strsvis rk_strsvis
    1228             : #endif
    1229             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
    1230             : strsvis(char *, const char *, int, const char *);
    1231             : #endif
    1232             : 
    1233             : #if !defined(HAVE_STRSVISX) || defined(NEED_STRSVISX_PROTO)
    1234             : #ifndef HAVE_STRSVISX
    1235             : #define strsvisx rk_strsvisx
    1236             : #endif
    1237             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
    1238             : strsvisx(char *, const char *, size_t, int, const char *);
    1239             : #endif
    1240             : 
    1241             : #if !defined(HAVE_STRUNVIS) || defined(NEED_STRUNVIS_PROTO)
    1242             : #ifndef HAVE_STRUNVIS
    1243             : #define strunvis rk_strunvis
    1244             : #endif
    1245             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
    1246             : strunvis(char *, const char *);
    1247             : #endif
    1248             : 
    1249             : #if !defined(HAVE_STRVIS) || defined(NEED_STRVIS_PROTO)
    1250             : #ifndef HAVE_STRVIS
    1251             : #define strvis rk_strvis
    1252             : #endif
    1253             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
    1254             : strvis(char *, const char *, int);
    1255             : #endif
    1256             : 
    1257             : #if !defined(HAVE_STRVISX) || defined(NEED_STRVISX_PROTO)
    1258             : #ifndef HAVE_STRVISX
    1259             : #define strvisx rk_strvisx
    1260             : #endif
    1261             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
    1262             : strvisx(char *, const char *, size_t, int);
    1263             : #endif
    1264             : 
    1265             : #if !defined(HAVE_SVIS) || defined(NEED_SVIS_PROTO)
    1266             : #ifndef HAVE_SVIS
    1267             : #define svis rk_svis
    1268             : #endif
    1269             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL
    1270             : svis(char *, int, int, int, const char *);
    1271             : #endif
    1272             : 
    1273             : #if !defined(HAVE_UNVIS) || defined(NEED_UNVIS_PROTO)
    1274             : #ifndef HAVE_UNVIS
    1275             : #define unvis rk_unvis
    1276             : #endif
    1277             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
    1278             : unvis(char *, int, int *, int);
    1279             : #endif
    1280             : 
    1281             : #if !defined(HAVE_VIS) || defined(NEED_VIS_PROTO)
    1282             : #ifndef HAVE_VIS
    1283             : #define vis rk_vis
    1284             : #endif
    1285             : ROKEN_LIB_FUNCTION char * ROKEN_LIB_CALL
    1286             : vis(char *, int, int, int);
    1287             : #endif
    1288             : 
    1289             : #if !defined(HAVE_CLOSEFROM)
    1290             : #define closefrom rk_closefrom
    1291             : #endif
    1292             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
    1293             : rk_closefrom(int);
    1294             : 
    1295             : #if !defined(HAVE_TIMEGM)
    1296             : #define timegm rk_timegm
    1297             : ROKEN_LIB_FUNCTION time_t ROKEN_LIB_CALL
    1298             : rk_timegm(struct tm *tm);
    1299             : #endif
    1300             : 
    1301             : #ifdef NEED_QSORT
    1302             : #define qsort rk_qsort
    1303             : void
    1304             : rk_qsort(void *, size_t, size_t, int (*)(const void *, const void *));
    1305             : #endif
    1306             : 
    1307             : #if !defined(HAVE_MERGESORT)
    1308             : #define mergesort rk_mergesort
    1309             : int
    1310             : mergesort(void *base, size_t nel, size_t width,
    1311             :           int (*compar)(const void *, const void *));
    1312             : #endif
    1313             : 
    1314             : #if !defined(HAVE_MERGESORT_R)
    1315             : #define mergesort_r rk_mergesort_r
    1316             : int
    1317             : mergesort_r(void *base, size_t nel, size_t width,
    1318             :             int (*compar)(const void *, const void *, void *), void *thunk);
    1319             : #endif
    1320             : 
    1321             : #ifndef HAVE_MEMSET_S
    1322             : #define memset_s rk_memset_s
    1323             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL memset_s(void *s, size_t smax,
    1324             :                                         int c, size_t n);
    1325             : #endif
    1326             : 
    1327             : #if defined(HAVE_ARC4RANDOM)
    1328             : # define rk_random() arc4random()
    1329             : #elif defined(HAVE_RANDOM)
    1330             : # define rk_random() random()
    1331             : #else
    1332             : # ifdef HAVE_WIN32_RAND_S
    1333             : ROKEN_LIB_FUNCTION unsigned int ROKEN_LIB_CALL
    1334             : rk_random(void);
    1335             : # else
    1336             : #  define rk_random() rand()
    1337             : # endif
    1338             : #endif
    1339             : 
    1340             : #ifndef HAVE_TDELETE
    1341             : #define tdelete(a,b,c) rk_tdelete(a,b,c)
    1342             : #endif
    1343             : #ifndef HAVE_TFIND
    1344             : #define tfind(a,b,c) rk_tfind(a,b,c)
    1345             : #endif
    1346             : #ifndef HAVE_TSEARCH
    1347             : #define tsearch(a,b,c) rk_tsearch(a,b,c)
    1348             : #endif
    1349             : #ifndef HAVE_TWALK
    1350             : #define twalk(a,b) rk_twalk(a,b)
    1351             : #endif
    1352             : 
    1353             : #if defined(__linux__) && defined(SOCK_CLOEXEC) && !defined(SOCKET_WRAPPER_REPLACE) && !defined(__SOCKET_WRAPPER_H__)
    1354             : #undef socket
    1355             : #define socket(_fam,_type,_prot) rk_socket(_fam,_type,_prot)
    1356             : int ROKEN_LIB_FUNCTION rk_socket(int, int, int);
    1357             : #endif
    1358             : 
    1359             : /* Microsoft VC 2010 POSIX definitions */
    1360             : #ifndef EAFNOSUPPORT
    1361             : #define EAFNOSUPPORT            102
    1362             : #endif
    1363             : #ifndef EINPROGRESS
    1364             : #define EINPROGRESS             112
    1365             : #endif
    1366             : #ifndef ELOOP
    1367             : #define ELOOP                   114
    1368             : #endif
    1369             : #ifndef ENOTSOCK
    1370             : #define ENOTSOCK                128
    1371             : #endif
    1372             : #ifndef ENOTSUP
    1373             : #define ENOTSUP                 129
    1374             : #endif
    1375             : #ifndef EOVERFLOW
    1376             : #define EOVERFLOW               132
    1377             : #endif
    1378             : #ifndef ETIMEDOUT
    1379             : #define ETIMEDOUT               138
    1380             : #endif
    1381             : #ifndef EWOULDBLOCK
    1382             : #define EWOULDBLOCK             140
    1383             : #endif
    1384             : 
    1385             : #ifdef WIN32
    1386             : ROKEN_LIB_FUNCTION int ROKEN_LIB_CALL
    1387             : win32_getLibraryVersion(const char *libname, char **outname, char **outversion);
    1388             : #endif
    1389             : 
    1390             : #ifdef SOCKET_WRAPPER_REPLACE
    1391             : #include <socket_wrapper.h>
    1392             : #endif
    1393             : 
    1394             : ROKEN_CPP_END

Generated by: LCOV version 1.14