@ -0,0 +1,33 @@ | |||
/* | |||
* stdlib.h compatibility shim | |||
* Public domain | |||
*/ | |||
#include_next <stdlib.h> | |||
#ifndef LIBCOMPAT_STDLIB_H | |||
#define LIBCOMPAT_STDLIB_H | |||
#include <sys/stat.h> | |||
#include <sys/time.h> | |||
#include <stdint.h> | |||
#ifndef HAVE_ARC4RANDOM_BUF | |||
uint32_t arc4random(void); | |||
uint32_t arc4random_uniform(uint32_t); | |||
#endif | |||
#ifndef HAVE_REALLOCARRAY | |||
void *reallocarray(void *, size_t, size_t); | |||
#endif | |||
#ifndef HAVE_SETPROCTITLE | |||
void setproctitle(const char *fmt, ...); | |||
#endif | |||
#ifndef HAVE_STRTONUM | |||
long long strtonum(const char *nptr, long long minval, | |||
long long maxval, const char **errstr); | |||
#endif | |||
#endif |
@ -0,0 +1,69 @@ | |||
/* | |||
* Public domain | |||
* string.h compatibility shim | |||
*/ | |||
#include_next <string.h> | |||
#ifndef LIBCOMPAT_STRING_H | |||
#define LIBCOMPAT_STRING_H | |||
#include <sys/types.h> | |||
#if defined(__sun) || defined(__hpux) | |||
/* Some functions historically defined in string.h were placed in strings.h by | |||
* SUS. Use the same hack as OS X and FreeBSD use to work around on Solaris and HPUX. | |||
*/ | |||
#include <strings.h> | |||
#endif | |||
#ifndef HAVE_STRLCPY | |||
size_t strlcpy(char *dst, const char *src, size_t siz); | |||
#endif | |||
#ifndef HAVE_STRLCAT | |||
size_t strlcat(char *dst, const char *src, size_t siz); | |||
#endif | |||
#ifndef HAVE_STRNDUP | |||
char * strndup(const char *str, size_t maxlen); | |||
/* the only user of strnlen is strndup, so only build it if needed */ | |||
#ifndef HAVE_STRNLEN | |||
size_t strnlen(const char *str, size_t maxlen); | |||
#endif | |||
#endif | |||
#ifndef HAVE_EXPLICIT_BZERO | |||
void explicit_bzero(void *, size_t); | |||
#endif | |||
#ifndef HAVE_TIMINGSAFE_BCMP | |||
int timingsafe_bcmp(const void *b1, const void *b2, size_t n); | |||
#endif | |||
#ifndef HAVE_TIMINGSAFE_MEMCMP | |||
int timingsafe_memcmp(const void *b1, const void *b2, size_t len); | |||
#endif | |||
#ifndef HAVE_MEMMEM | |||
void * memmem(const void *big, size_t big_len, const void *little, | |||
size_t little_len); | |||
#endif | |||
#ifdef _WIN32 | |||
#include <errno.h> | |||
static inline char * | |||
posix_strerror(int errnum) | |||
{ | |||
if (errnum == ECONNREFUSED) { | |||
return "Connection refused"; | |||
} | |||
return strerror(errnum); | |||
} | |||
#define strerror(errnum) posix_strerror(errnum) | |||
#endif | |||
#endif |
@ -0,0 +1,12 @@ | |||
/* | |||
* Public domain | |||
* sys/socket.h compatibility shim | |||
*/ | |||
#include_next <sys/socket.h> | |||
#ifndef SA_LEN | |||
#define SA_LEN(X) \ | |||
(((struct sockaddr*)(X))->sa_family == AF_INET ? sizeof(struct sockaddr_in) : \ | |||
((struct sockaddr*)(X))->sa_family == AF_INET6 ? sizeof(struct sockaddr_in6) : sizeof(struct sockaddr)) | |||
#endif |
@ -0,0 +1,10 @@ | |||
/* | |||
* Public domain | |||
* sys/time.h compatibility shim | |||
*/ | |||
#include_next <sys/time.h> | |||
#include <stdint.h> | |||
int adjfreq(const int64_t *freq, int64_t *oldfreq); |
@ -0,0 +1,25 @@ | |||
/* | |||
* Public domain | |||
* sys/types.h compatibility shim | |||
*/ | |||
#include_next <sys/types.h> | |||
#ifndef LIBCRYPTOCOMPAT_SYS_TYPES_H | |||
#define LIBCRYPTOCOMPAT_SYS_TYPES_H | |||
#include <stdint.h> | |||
#ifdef __MINGW32__ | |||
#include <_bsd_types.h> | |||
#endif | |||
#if !defined(HAVE_ATTRIBUTE__DEAD) && !defined(__dead) | |||
#define __dead | |||
#endif | |||
#if !defined(HAVE_ATTRIBUTE__BOUNDED__) && !defined(__bounded__) | |||
# define __bounded__(x, y, z) | |||
#endif | |||
#endif |