From c7223d7e0cd74562255eb80d02d659e6901d43b9 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Wed, 6 Nov 2019 17:04:20 -0500 Subject: Declare more missing functions and deal with lack of SO_NOSIGPIPE --- Makefile | 2 ++ bounce.c | 1 + compat.h | 11 +++++++---- dispatch.c | 4 ++++ 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 465a2e9..265781e 100644 --- a/Makefile +++ b/Makefile @@ -33,6 +33,8 @@ pounce: ${OBJS} ${OBJS}: bounce.h compat.h +dispatch.o: compat.h + tags: *.c *.h ctags -w *.c *.h diff --git a/bounce.c b/bounce.c index 93afbb4..1f29f8c 100644 --- a/bounce.c +++ b/bounce.c @@ -372,6 +372,7 @@ int main(int argc, char *argv[]) { signal(SIGINT, signalHandler); signal(SIGTERM, signalHandler); + signal(SIGPIPE, SIG_IGN); signal(SIGINFO, signalHandler); signal(SIGUSR1, signalHandler); diff --git a/compat.h b/compat.h index a874d35..961ece9 100644 --- a/compat.h +++ b/compat.h @@ -17,14 +17,17 @@ #include #include -#ifdef NO_EXPLICIT_BZERO +// libcrypto defines these functions if libc doesn't. void explicit_bzero(void *b, size_t len); -#endif - -#ifdef NO_ARC4RANDOM +size_t strlcpy(char *restrict dst, const char *restrict src, size_t dstsize); +size_t strlcat(char *restrict dst, const char *restrict src, size_t dstsize); uint32_t arc4random(void); void arc4random_buf(void *buf, size_t nbytes); uint32_t arc4random_uniform(uint32_t upper_bound); + +// The default value of SO_RCVLOWAT is 1 anyway... +#ifndef SO_NOSIGPIPE +#define SO_NOSIGPIPE SO_RCVLOWAT #endif #ifndef SIGINFO diff --git a/dispatch.c b/dispatch.c index e52efc7..e80f297 100644 --- a/dispatch.c +++ b/dispatch.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -32,6 +33,8 @@ #include #endif +#include "compat.h" + static struct { struct pollfd *ptr; size_t len, cap; @@ -231,6 +234,7 @@ int main(int argc, char *argv[]) { if (error) err(EX_IOERR, "listen"); } + signal(SIGPIPE, SIG_IGN); for (;;) { int nfds = poll( event.ptr, event.len, (event.len > binds ? timeout : -1) -- cgit 1.4.1