diff options
author | Tobias Brunner <tobias@strongswan.org> | 2015-11-13 15:46:27 +0100 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2015-11-13 18:24:45 +0100 |
commit | ef4279f2e5aa9881855ed608cb81062c3676f077 (patch) | |
tree | a26bdefc5ff700204dd7b800a849ef9c02d5716e /src/libstrongswan/utils | |
parent | 1c1f71343178b35b68265b33093389625a7b2ed6 (diff) | |
download | strongswan-ef4279f2e5aa9881855ed608cb81062c3676f077.tar.bz2 strongswan-ef4279f2e5aa9881855ed608cb81062c3676f077.tar.xz |
utils: Provide a fallback for sigwaitinfo() if needed
Apparently, not available on Mac OS X 10.10 Yosemite. We don't provide
this on Windows.
Diffstat (limited to 'src/libstrongswan/utils')
-rw-r--r-- | src/libstrongswan/utils/compat/android.h | 28 | ||||
-rw-r--r-- | src/libstrongswan/utils/utils.c | 22 | ||||
-rw-r--r-- | src/libstrongswan/utils/utils.h | 16 |
3 files changed, 36 insertions, 30 deletions
diff --git a/src/libstrongswan/utils/compat/android.h b/src/libstrongswan/utils/compat/android.h index a9a1b13a5..b3ea9c475 100644 --- a/src/libstrongswan/utils/compat/android.h +++ b/src/libstrongswan/utils/compat/android.h @@ -21,8 +21,6 @@ #ifndef ANDROID_H_ #define ANDROID_H_ -#include <android/api-level.h> - /* stuff defined in AndroidConfig.h, which is included using the -include * command-line option, thus cannot be undefined using -U CFLAGS options. * the reason we have to undefine these flags in the first place, is that @@ -30,30 +28,4 @@ * actually defined. */ #undef HAVE_BACKTRACE -/* sigwaitinfo() is not defined up to this API level, provide a fallback */ -#if __ANDROID_API__ <= 21 -#include <errno.h> -#include <signal.h> - -static inline int sigwaitinfo(const sigset_t *set, void *info) -{ - int sig, err; - - if (info) - { /* we don't replicate siginfo_t, which we don't use */ - errno = EINVAL; - return -1; - } - err = sigwait(set, &sig); - if (err != 0) - { - errno = err; - sig = -1; - } - return sig; -} -#else -#error Check availability of sigwaitinfo() in this API level -#endif - #endif /** ANDROID_H_ @}*/ diff --git a/src/libstrongswan/utils/utils.c b/src/libstrongswan/utils/utils.c index fca614ef4..47d72ee98 100644 --- a/src/libstrongswan/utils/utils.c +++ b/src/libstrongswan/utils/utils.c @@ -20,6 +20,7 @@ #include <unistd.h> #include <limits.h> #include <ctype.h> +#include <errno.h> #ifndef WIN32 # include <signal.h> #endif @@ -126,7 +127,26 @@ void wait_sigint() sigwaitinfo(&set, NULL); } -#endif +#ifndef HAVE_SIGWAITINFO +int sigwaitinfo(const sigset_t *set, void *info) +{ + int sig, err; + + if (info) + { /* we don't replicate siginfo_t, fail if anybody tries to use it */ + errno = EINVAL; + return -1; + } + err = sigwait(set, &sig); + if (err != 0) + { + errno = err; + sig = -1; + } + return sig; +} +#endif /* HAVE_SIGWAITINFO */ +#endif /* WIN32 */ #ifndef HAVE_CLOSEFROM /** diff --git a/src/libstrongswan/utils/utils.h b/src/libstrongswan/utils/utils.h index 44d882bab..18b17b120 100644 --- a/src/libstrongswan/utils/utils.h +++ b/src/libstrongswan/utils/utils.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2014 Tobias Brunner + * Copyright (C) 2008-2015 Tobias Brunner * Copyright (C) 2008 Martin Willi * Hochschule fuer Technik Rapperswil * @@ -38,6 +38,7 @@ # include <netinet/in.h> # include <sched.h> # include <poll.h> +# include <signal.h> #endif #include "utils/types.h" @@ -151,6 +152,19 @@ void utils_deinit(); */ #define ignore_result(call) { if(call){}; } +#if !defined(HAVE_SIGWAITINFO) && !defined(WIN32) +/** + * Block and wait for a set of signals + * + * We don't replicate the functionality of siginfo_t. If info is not NULL + * -1 is returend and errno is set to EINVAL. + * + * @param set set of signals to wait for + * @param info must be NULL + */ +int sigwaitinfo(const sigset_t *set, void *info); +#endif + /** * Portable function to wait for SIGINT/SIGTERM (or equivalent). */ |