From 5596f73371b11e702d0c7afae1e39b7196ac9391 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Fri, 14 Oct 2016 15:00:49 -0400 Subject: [PATCH] Fix Cygwin Newlib signal handler (Issue 315) --- config.compat | 4 +++- config.h | 4 +++- test.cpp | 2 +- trap.h | 10 +++++----- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/config.compat b/config.compat index 1dd60917..09df40aa 100644 --- a/config.compat +++ b/config.compat @@ -690,7 +690,9 @@ NAMESPACE_END # define THREADS_AVAILABLE #endif -#if defined(CRYPTOPP_BSD_AVAILABLE) || defined(CRYPTOPP_UNIX_AVAILABLE) || defined(__CYGWIN__) +// Newlib on Cygwin is a problem. __NEWLIB__ is not defined yet; use __CYGWIN__ as a proxy +// Also see https://github.com/weidai11/cryptopp/issues/315 +#if defined(CRYPTOPP_UNIX_AVAILABLE) && !defined(__CYGWIN__) # define UNIX_SIGNALS_AVAILABLE 1 #endif diff --git a/config.h b/config.h index 85a8a878..547d2b69 100644 --- a/config.h +++ b/config.h @@ -690,7 +690,9 @@ NAMESPACE_END # define THREADS_AVAILABLE #endif -#if defined(CRYPTOPP_BSD_AVAILABLE) || defined(CRYPTOPP_UNIX_AVAILABLE) || defined(__CYGWIN__) +// Newlib on Cygwin is a problem. __NEWLIB__ is not defined yet; use __CYGWIN__ as a proxy +// Also see https://github.com/weidai11/cryptopp/issues/315 +#if defined(CRYPTOPP_UNIX_AVAILABLE) && !defined(__CYGWIN__) # define UNIX_SIGNALS_AVAILABLE 1 #endif diff --git a/test.cpp b/test.cpp index 46f3e8ea..97d8731b 100644 --- a/test.cpp +++ b/test.cpp @@ -126,7 +126,7 @@ RandomNumberGenerator & GlobalRNG() } // See misc.h and trap.h for comments and usage -#if CRYPTOPP_DEBUG && (defined(CRYPTOPP_BSD_AVAILABLE) || defined(CRYPTOPP_UNIX_AVAILABLE)) +#if CRYPTOPP_DEBUG && defined(UNIX_SIGNALS_AVAILABLE) static const SignalHandler s_dummyHandler; // static const DebugTrapHandler s_dummyHandler; #endif diff --git a/trap.h b/trap.h index f594e44c..89a6be71 100644 --- a/trap.h +++ b/trap.h @@ -21,9 +21,9 @@ #if CRYPTOPP_DEBUG # include # include -# if defined(CRYPTOPP_BSD_AVAILABLE) || defined(CRYPTOPP_UNIX_AVAILABLE) +# if defined(UNIX_SIGNALS_AVAILABLE) # include "ossig.h" -# elif defined(CRYPTOPP_WIN32_AVAILABLE) +# elif defined(CRYPTOPP_WIN32_AVAILABLE) && !defined(__CYGWIN__) # if (_MSC_VER >= 1400) # include # endif @@ -62,7 +62,7 @@ # define CRYPTOPP_ASSERT(exp) { ... } #endif -#if CRYPTOPP_DEBUG && (defined(CRYPTOPP_BSD_AVAILABLE) || defined(CRYPTOPP_UNIX_AVAILABLE)) +#if CRYPTOPP_DEBUG && defined(UNIX_SIGNALS_AVAILABLE) # define CRYPTOPP_ASSERT(exp) { \ if (!(exp)) { \ std::ostringstream oss; \ @@ -73,7 +73,7 @@ raise(SIGTRAP); \ } \ } -#elif CRYPTOPP_DEBUG && defined(CRYPTOPP_WIN32_AVAILABLE) +#elif CRYPTOPP_DEBUG && defined(CRYPTOPP_WIN32_AVAILABLE) && !defined(__CYGWIN__) # define CRYPTOPP_ASSERT(exp) { \ if (!(exp)) { \ std::ostringstream oss; \ @@ -96,7 +96,7 @@ NAMESPACE_BEGIN(CryptoPP) // ************** SIGTRAP handler *************** -#if (CRYPTOPP_DEBUG && (defined(CRYPTOPP_BSD_AVAILABLE) || defined(CRYPTOPP_UNIX_AVAILABLE))) || defined(CRYPTOPP_DOXYGEN_PROCESSING) +#if (CRYPTOPP_DEBUG && defined(UNIX_SIGNALS_AVAILABLE)) || defined(CRYPTOPP_DOXYGEN_PROCESSING) //! \brief Default SIGTRAP handler //! \details DebugTrapHandler() can be used by a program to install an empty SIGTRAP handler. If present, //! the handler ensures there is a signal handler in place for SIGTRAP raised by