From 61b4199fe43e94d6753290a62eb45363503e0deb Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Mon, 5 Sep 2022 06:59:43 +0000 Subject: Better NSIG detection and fix Incredibly enough, OpenBSD defines NSIG correctly, so our workaround was not accurate. Signed-off-by: Laurent Bercot --- src/include/skalibs/nsig.h | 20 ++++++++++++-------- src/include/skalibs/skalibs.h | 2 +- 2 files changed, 13 insertions(+), 9 deletions(-) (limited to 'src/include') diff --git a/src/include/skalibs/nsig.h b/src/include/skalibs/nsig.h index 6dbddea..f6d0ee5 100644 --- a/src/include/skalibs/nsig.h +++ b/src/include/skalibs/nsig.h @@ -1,9 +1,8 @@ /* ISC license. */ /* - This header MUST be paired with skalibs/nonposix.h AND - skalibs/bsdsnowflake.h, both of which must be included - before system headers. + This header MUST be paired with skalibs/nonposix.h, + which must be included before system headers. */ #ifndef SKALIBS_NSIG_H @@ -18,17 +17,22 @@ # define NSIG (SIGMAX + 1) # elif defined(_SIGMAX) # define NSIG(_SIGMAX + 1) -# elif defined(SKALIBS_BSD_SUCKS) -# define NSIG 64 # else # define NSIG 65 # endif #endif -#ifdef SKALIBS_BSD_SUCKS -# define SKALIBS_NSIG (NSIG+1) -#else +/* + Some systems (FreeBSD, Darwin) incorrectly define NSIG as 32 + (their highest signal number) when it should be 33 (highest plus one). + OpenBSD gets this right so we can't use SKALIBS_BSD_SUCKS. + The heuristic we use is: if NSIG is a power of two, it's wrong. +*/ + +#if NSIG & (NSIG - 1) # define SKALIBS_NSIG NSIG +#else +# define SKALIBS_NSIG (NSIG+1) #endif #endif diff --git a/src/include/skalibs/skalibs.h b/src/include/skalibs/skalibs.h index 5e24fe2..c1eaf81 100644 --- a/src/include/skalibs/skalibs.h +++ b/src/include/skalibs/skalibs.h @@ -9,7 +9,7 @@ - skalibs/sysdeps.h: system-dependent feature test macros - skalibs/nonposix.h: pre-system headers definitions for POSIX extensions - skalibs/bsdsnowflake.h: pre-system headers BSD-specific workarounds - - skalibs/nsig.h: SKALIBS_NSIG definition, requires nonposix+bsdsnowflake + - skalibs/nsig.h: SKALIBS_NSIG definition, requires nonposix - skalibs/posixishard.h: post-system headers workarounds for conformance failures */ -- cgit v1.2.3