diff -Nru libbsd-0.8.7.orig/include/bsd/err.h libbsd-0.8.7/include/bsd/err.h --- libbsd-0.8.7.orig/include/bsd/err.h 2017-06-06 04:21:05.000000000 +0200 +++ libbsd-0.8.7/include/bsd/err.h 2018-04-14 13:38:44.795802502 +0200 @@ -42,7 +42,10 @@ #include -__BEGIN_DECLS +/* __BEGIN_DECLS */ +#ifdef __cplusplus +extern "C" { +#endif void warnc(int code, const char *format, ...) __printflike(2, 3); void vwarnc(int code, const char *format, va_list ap) @@ -51,6 +54,9 @@ __printflike(3, 4); void verrc(int status, int code, const char *format, va_list ap) __printflike(3, 0); -__END_DECLS +#ifdef __cplusplus +} +#endif +/* __END_DECLS */ #endif diff -Nru libbsd-0.8.7.orig/include/bsd/libutil.h libbsd-0.8.7/include/bsd/libutil.h --- libbsd-0.8.7.orig/include/bsd/libutil.h 2017-06-19 03:17:21.000000000 +0200 +++ libbsd-0.8.7/include/bsd/libutil.h 2018-04-14 13:38:44.795802502 +0200 @@ -53,7 +53,10 @@ ino_t pf_ino; }; -__BEGIN_DECLS +/* __BEGIN_DECLS */ +#ifdef __cplusplus +extern "C" { +#endif int humanize_number(char *buf, size_t len, int64_t bytes, const char *suffix, int scale, int flags); int expand_number(const char *_buf, uint64_t *_num); @@ -66,7 +69,10 @@ int pidfile_remove(struct pidfh *pfh); char *fparseln(FILE *, size_t *, size_t *, const char[3], int); -__END_DECLS +#ifdef __cplusplus +} +#endif +/* __END_DECLS */ /* humanize_number(3) */ #define HN_DECIMAL 0x01 diff -Nru libbsd-0.8.7.orig/include/bsd/md5.h libbsd-0.8.7/include/bsd/md5.h --- libbsd-0.8.7.orig/include/bsd/md5.h 2017-06-19 03:17:21.000000000 +0200 +++ libbsd-0.8.7/include/bsd/md5.h 2018-04-14 13:38:44.795802502 +0200 @@ -30,7 +30,10 @@ #include #include -__BEGIN_DECLS +/* __BEGIN_DECLS */ +#ifdef __cplusplus +extern "C" { +#endif void MD5Init(MD5_CTX *); void MD5Update(MD5_CTX *, const uint8_t *, size_t) __attribute__((__bounded__(__string__,2,3))); @@ -49,6 +52,9 @@ char *MD5Data(const uint8_t *, size_t, char *) __attribute__((__bounded__(__string__,1,2))) __attribute__((__bounded__(__minbytes__,3,MD5_DIGEST_STRING_LENGTH))); -__END_DECLS +#ifdef __cplusplus +} +#endif +/* __END_DECLS */ #endif /* LIBBSD_MD5_H */ diff -Nru libbsd-0.8.7.orig/include/bsd/nlist.h libbsd-0.8.7/include/bsd/nlist.h --- libbsd-0.8.7.orig/include/bsd/nlist.h 2017-06-19 03:17:21.000000000 +0200 +++ libbsd-0.8.7/include/bsd/nlist.h 2018-04-14 13:38:44.795802502 +0200 @@ -88,8 +88,14 @@ #define N_FORMAT "%08x" /* namelist value format; XXX */ -__BEGIN_DECLS +/* __BEGIN_DECLS */ +#ifdef __cplusplus +extern "C" { +#endif extern int nlist(const char *filename, struct nlist *list); -__END_DECLS +#ifdef __cplusplus +} +#endif +/* __END_DECLS */ #endif diff -Nru libbsd-0.8.7.orig/include/bsd/readpassphrase.h libbsd-0.8.7/include/bsd/readpassphrase.h --- libbsd-0.8.7.orig/include/bsd/readpassphrase.h 2017-06-19 03:17:21.000000000 +0200 +++ libbsd-0.8.7/include/bsd/readpassphrase.h 2018-04-14 13:38:44.795802502 +0200 @@ -34,8 +34,14 @@ #include #include -__BEGIN_DECLS +/* __BEGIN_DECLS */ +#ifdef __cplusplus +extern "C" { +#endif char * readpassphrase(const char *, char *, size_t, int); -__END_DECLS +#ifdef __cplusplus +} +#endif +/* __END_DECLS */ #endif /* !LIBBSD_READPASSPHRASE_H */ diff -Nru libbsd-0.8.7.orig/include/bsd/stdio.h libbsd-0.8.7/include/bsd/stdio.h --- libbsd-0.8.7.orig/include/bsd/stdio.h 2017-06-06 04:21:05.000000000 +0200 +++ libbsd-0.8.7/include/bsd/stdio.h 2018-04-14 13:38:44.795802502 +0200 @@ -45,7 +45,10 @@ #endif #include -__BEGIN_DECLS +/* __BEGIN_DECLS */ +#ifdef __cplusplus +extern "C" { +#endif const char *fmtcheck(const char *, const char *); /* XXX: The function requires cooperation from the system libc to store the @@ -73,7 +76,10 @@ #define fwopen(cookie, fn) funopen(cookie, NULL, fn, NULL, NULL) int fpurge(FILE *fp); -__END_DECLS +#ifdef __cplusplus +} +#endif +/* __END_DECLS */ #endif #endif diff -Nru libbsd-0.8.7.orig/include/bsd/stdlib.h libbsd-0.8.7/include/bsd/stdlib.h --- libbsd-0.8.7.orig/include/bsd/stdlib.h 2017-08-05 13:20:00.000000000 +0200 +++ libbsd-0.8.7/include/bsd/stdlib.h 2018-04-14 13:58:02.519913671 +0200 @@ -46,7 +46,10 @@ #include #include -__BEGIN_DECLS +/* __BEGIN_DECLS */ +#ifdef __cplusplus +extern "C" { +#endif uint32_t arc4random(void); void arc4random_stir(void); void arc4random_addrandom(unsigned char *dat, int datlen); @@ -67,7 +70,7 @@ const unsigned char *table, unsigned endbyte); void *reallocf(void *ptr, size_t size); -#if defined(_GNU_SOURCE) && defined(__GLIBC__) && !__GLIBC_PREREQ(2, 26) +#if defined(_GNU_SOURCE) void *reallocarray(void *ptr, size_t nmemb, size_t size); #endif @@ -75,6 +78,9 @@ const char **errstr); char *getbsize(int *headerlenp, long *blocksizep); -__END_DECLS +#ifdef __cplusplus +} +#endif +/* __END_DECLS */ #endif diff -Nru libbsd-0.8.7.orig/include/bsd/string.h libbsd-0.8.7/include/bsd/string.h --- libbsd-0.8.7.orig/include/bsd/string.h 2017-08-05 13:20:54.000000000 +0200 +++ libbsd-0.8.7/include/bsd/string.h 2018-04-14 13:57:51.871985815 +0200 @@ -36,15 +36,21 @@ #include #include -__BEGIN_DECLS +/* __BEGIN_DECLS */ +#ifdef __cplusplus +extern "C" { +#endif size_t strlcpy(char *dst, const char *src, size_t siz); size_t strlcat(char *dst, const char *src, size_t siz); char *strnstr(const char *str, const char *find, size_t str_len); void strmode(mode_t mode, char *str); -#if defined(_GNU_SOURCE) && defined(__GLIBC__) && !__GLIBC_PREREQ(2, 25) +#if defined(_GNU_SOURCE) void explicit_bzero(void *buf, size_t len); #endif -__END_DECLS +#ifdef __cplusplus +} +#endif +/* __END_DECLS */ #endif diff -Nru libbsd-0.8.7.orig/include/bsd/stringlist.h libbsd-0.8.7/include/bsd/stringlist.h --- libbsd-0.8.7.orig/include/bsd/stringlist.h 2017-06-19 03:17:21.000000000 +0200 +++ libbsd-0.8.7/include/bsd/stringlist.h 2018-04-14 13:38:44.795802502 +0200 @@ -43,12 +43,18 @@ size_t sl_cur; } StringList; -__BEGIN_DECLS +/* __BEGIN_DECLS */ +#ifdef __cplusplus +extern "C" { +#endif StringList *sl_init(void); int sl_add(StringList *, char *); void sl_free(StringList *, int); char *sl_find(StringList *, const char *); int sl_delete(StringList *, const char *, int); -__END_DECLS +#ifdef __cplusplus +} +#endif +/* __END_DECLS */ #endif /* LIBBSD_STRINGLIST_H */ diff -Nru libbsd-0.8.7.orig/include/bsd/unistd.h libbsd-0.8.7/include/bsd/unistd.h --- libbsd-0.8.7.orig/include/bsd/unistd.h 2017-06-06 04:22:22.000000000 +0200 +++ libbsd-0.8.7/include/bsd/unistd.h 2018-04-14 13:38:44.795802502 +0200 @@ -45,7 +45,10 @@ #define S_ISTXT S_ISVTX #endif -__BEGIN_DECLS +/* __BEGIN_DECLS */ +#ifdef __cplusplus +extern "C" { +#endif extern int optreset; #ifdef LIBBSD_OVERLAY @@ -68,6 +71,9 @@ __printflike(1, 2); int getpeereid(int s, uid_t *euid, gid_t *egid); -__END_DECLS +#ifdef __cplusplus +} +#endif +/* __END_DECLS */ #endif diff -Nru libbsd-0.8.7.orig/include/bsd/vis.h libbsd-0.8.7/include/bsd/vis.h --- libbsd-0.8.7.orig/include/bsd/vis.h 2017-06-19 03:17:21.000000000 +0200 +++ libbsd-0.8.7/include/bsd/vis.h 2018-04-14 13:38:44.799802474 +0200 @@ -74,7 +74,10 @@ #include -__BEGIN_DECLS +/* __BEGIN_DECLS */ +#ifdef __cplusplus +extern "C" { +#endif char *vis(char *, int, int, int); int strvis(char *, const char *, int); int strvisx(char *, const char *, size_t, int); @@ -83,6 +86,9 @@ int strunvisx(char *, const char *, int); ssize_t strnunvis(char *, const char *, size_t); int unvis(char *, int, int *, int); -__END_DECLS +#ifdef __cplusplus +} +#endif +/* __END_DECLS */ #endif /* !LIBBSD_VIS_H */ diff -Nru libbsd-0.8.7.orig/include/bsd/wchar.h libbsd-0.8.7/include/bsd/wchar.h --- libbsd-0.8.7.orig/include/bsd/wchar.h 2017-06-06 04:06:45.000000000 +0200 +++ libbsd-0.8.7/include/bsd/wchar.h 2018-04-14 13:38:44.799802474 +0200 @@ -43,12 +43,18 @@ #include #include -__BEGIN_DECLS +/* __BEGIN_DECLS */ +#ifdef __cplusplus +extern "C" { +#endif wchar_t *fgetwln(FILE *stream, size_t *len); size_t wcslcat(wchar_t *dst, const wchar_t *src, size_t size); size_t wcslcpy(wchar_t *dst, const wchar_t *src, size_t size); -__END_DECLS +#ifdef __cplusplus +} +#endif +/* __END_DECLS */ #endif #endif diff -Nru libbsd-0.8.7.orig/src/funopen.c libbsd-0.8.7/src/funopen.c --- libbsd-0.8.7.orig/src/funopen.c 2017-06-06 04:21:05.000000000 +0200 +++ libbsd-0.8.7/src/funopen.c 2018-04-14 14:00:26.386939154 +0200 @@ -137,7 +137,7 @@ return fopencookie(cookiewrap, mode, funcswrap); } -#elif defined(__MUSL__) +#elif defined(__MUSL__) || defined(__midipix__) /* remove this when we've updated to 1.16 */ /* * This is unimplementable on musl based systems, and upstream has stated * they will not add the needed support to implement it. Just ignore this diff -Nru libbsd-0.8.7.orig/src/getentropy.c libbsd-0.8.7/src/getentropy.c --- libbsd-0.8.7.orig/src/getentropy.c 2017-06-06 04:21:24.000000000 +0200 +++ libbsd-0.8.7/src/getentropy.c 2018-04-14 14:17:41.264344594 +0200 @@ -40,6 +40,8 @@ #include "getentropy_aix.c" #elif defined(__hpux) #include "getentropy_hpux.c" +#elif defined(__midipix__) +#include "getentropy_midipix.c" #else #error "No getentropy hooks defined for this platform." #endif diff -Nru libbsd-0.8.7.orig/src/getentropy_midipix.c libbsd-0.8.7/src/getentropy_midipix.c --- libbsd-0.8.7.orig/src/getentropy_midipix.c 1970-01-01 01:00:00.000000000 +0100 +++ libbsd-0.8.7/src/getentropy_midipix.c 2018-04-14 14:19:03.568979997 +0200 @@ -0,0 +1,118 @@ +/* Temporary copy-paste from getentropy_linux.c until we get a native getentropy() implementation */ + + +#define _POSIX_C_SOURCE 199309L +#define _GNU_SOURCE 1 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int getentropy(void *buf, size_t len); + +static int gotdata(char *buf, size_t len); +static int getentropy_urandom(void *buf, size_t len); + +int +getentropy(void *buf, size_t len) +{ + int ret = -1; + + if (len > 256) { + errno = EIO; + return (-1); + } + + ret = getentropy_urandom(buf, len); + if (ret != -1) + return (ret); + + /* Oh well! */ + raise(SIGKILL); + return -1; +} + +static int +gotdata(char *buf, size_t len) +{ + char any_set = 0; + size_t i; + + for (i = 0; i < len; ++i) + any_set |= buf[i]; + if (any_set == 0) + return (-1); + return (0); +} + +static int +getentropy_urandom(void *buf, size_t len) +{ + struct stat st; + size_t i; + int fd, cnt, flags; + int save_errno = errno; + +start: + + flags = O_RDONLY; +#ifdef O_NOFOLLOW + flags |= O_NOFOLLOW; +#endif +#ifdef O_CLOEXEC + flags |= O_CLOEXEC; +#endif + fd = open("/dev/urandom", flags, 0); + if (fd == -1) { + if (errno == EINTR) + goto start; + goto nodevrandom; + } +#ifndef O_CLOEXEC + fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC); +#endif + + /* Lightly verify that the device node looks sane */ + if (fstat(fd, &st) == -1 || !S_ISCHR(st.st_mode)) { + close(fd); + goto nodevrandom; + } + for (i = 0; i < len; ) { + size_t wanted = len - i; + ssize_t ret = read(fd, (char *)buf + i, wanted); + + if (ret == -1) { + if (errno == EAGAIN || errno == EINTR) + continue; + close(fd); + goto nodevrandom; + } + i += ret; + } + close(fd); + if (gotdata(buf, len) == 0) { + errno = save_errno; + return (0); /* satisfied */ + } +nodevrandom: + errno = EIO; + return (-1); +} diff -Nru libbsd-0.8.7.orig/src/getpeereid.c libbsd-0.8.7/src/getpeereid.c --- libbsd-0.8.7.orig/src/getpeereid.c 2017-06-06 04:06:45.000000000 +0200 +++ libbsd-0.8.7/src/getpeereid.c 2018-04-14 14:01:46.514396572 +0200 @@ -40,7 +40,7 @@ getpeereid(int s, uid_t *euid, gid_t *egid) { /* XXX: This should be autodetected at build time instead. */ -#if defined(__linux__) +#if defined(__linux__) || defined(__midipix__) struct ucred cred; #elif defined(__OpenBSD__) struct sockpeercred cred; diff -Nru libbsd-0.8.7.orig/src/hash/sha512.h libbsd-0.8.7/src/hash/sha512.h --- libbsd-0.8.7.orig/src/hash/sha512.h 2017-06-06 04:21:05.000000000 +0200 +++ libbsd-0.8.7/src/hash/sha512.h 2018-04-14 13:38:44.799802474 +0200 @@ -39,7 +39,10 @@ unsigned char buf[128]; } SHA512_CTX; -__BEGIN_DECLS +/* __BEGIN_DECLS */ +#ifdef __cplusplus +extern "C" { +#endif void SHA512_Init(SHA512_CTX *); void SHA512_Update(SHA512_CTX *, const void *, size_t); @@ -48,6 +51,9 @@ char *SHA512_File(const char *, char *); char *SHA512_FileChunk(const char *, char *, off_t, off_t); char *SHA512_Data(const void *, unsigned int, char *); -__END_DECLS +#ifdef __cplusplus +} +#endif +/* __END_DECLS */ #endif /* !_SHA512_H_ */ diff -Nru libbsd-0.8.7.orig/src/setproctitle.c libbsd-0.8.7/src/setproctitle.c --- libbsd-0.8.7.orig/src/setproctitle.c 2017-07-17 00:47:19.000000000 +0200 +++ libbsd-0.8.7/src/setproctitle.c 2018-04-14 14:05:35.448846935 +0200 @@ -280,6 +280,7 @@ *++nul = '\0'; } } +#ifndef __midipix__ __asm__(".symver setproctitle_impl,setproctitle@@LIBBSD_0.5"); /* The original function introduced in 0.2 was a stub, it only got implemented @@ -293,3 +294,4 @@ __attribute__((alias("setproctitle_impl"))); #endif __asm__(".symver setproctitle_stub,setproctitle@LIBBSD_0.2"); +#endif